C# Json从JsonConverter错误返回
我需要用C#创建一些JSON,格式如下: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
{
"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);