C# Json从JsonConverter错误返回

C# Json从JsonConverter错误返回,c#,json,web-services,json.net,jsonserializer,C#,Json,Web Services,Json.net,Jsonserializer,我需要用C#创建一些JSON,格式如下: { "id": 10, "items": [ { "text": "Link 1", "attr": { "href": "/somepage" }, "menuId": 20 }, { "text": "Link 1", "attr": { "href": "/some

我需要用C#创建一些JSON,格式如下:

{
    "id": 10,
    "items": [
        {
            "text": "Link 1",
            "attr": { "href": "/somepage" },
            "menuId": 20
        },
         {
            "text": "Link 1",
            "attr": { "href": "/someotherpage", "class": "test" },
            "menuId": 21
        }
    ]
}
我已经创建了一个web服务来创建基于一系列对象的字符串。首先,我的对象:

public class MenuItems
{
    public string Id { get; set; }
    public List<MenuItem> Items { get; set; }
}
var list = new List<MenuItem>();

var children = //a call to our CMS api
foreach (var child in children)
{
    var menuItem = new MenuItem();
    menuItem.Text = child.PageName;
    menuItem.MenuId = child.ContentLink.ID.ToString(CultureInfo.InvariantCulture);
    menuItem.Attr.Add("href", urlResolver.GetUrl(child.ContentLink));
    menuItem.Attr.Add("data-id-test", "Dave");
    list.Add(menuItem);
}

var obj = new MenuItems {Id = id, Items = list};

var json = JsonConvert.SerializeObject(obj,
    new JsonSerializerSettings() {ContractResolver = new LowercaseContractResolver()});

return json;
然后,我的代码来构建我的对象:

public class MenuItems
{
    public string Id { get; set; }
    public List<MenuItem> Items { get; set; }
}
var list = new List<MenuItem>();

var children = //a call to our CMS api
foreach (var child in children)
{
    var menuItem = new MenuItem();
    menuItem.Text = child.PageName;
    menuItem.MenuId = child.ContentLink.ID.ToString(CultureInfo.InvariantCulture);
    menuItem.Attr.Add("href", urlResolver.GetUrl(child.ContentLink));
    menuItem.Attr.Add("data-id-test", "Dave");
    list.Add(menuItem);
}

var obj = new MenuItems {Id = id, Items = list};

var json = JsonConvert.SerializeObject(obj,
    new JsonSerializerSettings() {ContractResolver = new LowercaseContractResolver()});

return json;
如果我将JSON响应粘贴到中,它会声明整个字符串只是一个数组。Firefix告诉我这是一个单独的字符数组,所以很明显我做错了什么


有人有什么想法吗?

更改您的方法
DoWork
,使其返回
MenuItem
,而不是手动序列化对象,只需在您的方法中返回即可。WCF将为您完成所有的序列化/反序列化。哇-这很简单,除了我需要小写的属性…没有JsonConverter有什么方法可以这样做吗?您可以使用
DataContract
DataMember
属性…Hi@L.B我如何接受注释作为正确答案?你的评论完美地解决了我们的问题。
[OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "json/{id}")]
    string DoWork(string id);