如何将此JSON反序列化为C#对象?
我想弄清楚如何创建一个C#类,我可以反序列化这个JSON到。 有人可以指出我正确的方向吗?如何将此JSON反序列化为C#对象?
这里是我的JSON
{
"0": {
"heading": "Home",
"link": "#",
"dropdown": {}
},
"1": {
"heading": "About",
"link": "#",
"dropdown": {
"0": {
"name": "Programs",
"value": "programs"
},
"1": {
"name": "Sample Page",
"value": "test"
},
"2": {
"name": "Donations",
"value": "donations"
}
}
},
"2": {
"heading": "Products",
"link": "#",
"dropdown": {}
},
"3": {
"heading": "Contact Us",
"link": "#",
"dropdown": {
"0": {
"name": "Programs",
"value": "programs"
},
"1": {
"name": "Donations",
"value": "donations"
}
}
}
}
我试过以下,没有运气
public class Menu
{
public MenuItem MenuItems { get; set; }
}
public class MenuItem
{
public string Heading { get; set; }
public string Link { get; set; }
public DropDownMenu DropDownMenu { get; set; }
}
public class DropDownMenu
{
public string Name { get; set; }
public string Value { get; set; }
}
在我的控制,我使用下面的尝试和反序列化json进入我的对象。
[HttpPost]
public ActionResult AddMenu(string menuType, string menu, string menuTitle)
{
var serializer = new JavaScriptSerializer();
var newMenu = serializer.Deserialize<Menu>(menu);
}
注意:菜单变量包含JSON字符串。
ASP.NET MVC 3包括内置的,使 动作方法来接收JSON编码的数据和模型绑定到 动作方法参数JSON绑定支持。
不是接收参数为string
,你可以尝试直接绑定请求你的对象(JSON模型绑定):
[HttpPost]
public ActionResult AddMenu(string menuType, Menu menu, string menuTitle)
{
// use menu here, no need to deserialize anything else
}
此外,确保客户端发送请求的内容类型JSON,例如:
contentType: 'application/json; charset=utf-8',
您当前的JSON有4个菜单项......我猜可能会更改为5或6,对吧?......如果是这样......您的JSON不正确,您应该使用数组。
喜欢的东西:
[
{
"heading": "Home",
"link": "#",
"dropdown": []
},
{
"heading": "About",
"link": "#",
"dropdown": [
{
"name": "Programs",
"value": "programs"
},
{
"name": "Sample Page",
"value": "test"
},
{
"name": "Donations",
"value": "donations"
}
]
},
{
"heading": "Products",
"link": "#",
"dropdown": []
},
{
"heading": "Contact Us",
"link": "#",
"dropdown": [
{
"name": "Programs",
"value": "programs"
},
{
"name": "Donations",
"value": "donations"
}
]
}
]
,然后定义你的类:
public class MenuItem
{
public string heading
{
get;
set;
}
public string link
{
get;
set;
}
public DropDownMenu[] dropdown
{
get;
set;
}
}
public class DropDownMenu
{
public string Name
{
get;
set;
}
public string Value
{
get;
set;
}
}
然后你就可以反序列化JSON的作为 “的MenuItems的阵列” ......这样的:
var ser = new JavaScriptSerializer();
var newMenu = ser.Deserialize<MenuItem[]>(json);
希望有帮助,
丹尼尔。
这导致了一个异常,说明没有为MenuItem []定义无参数的构造函数。如果我定义它,我仍然会收到异常。 – 2013-03-04 04:06:07
我刚刚在Mvc 4站点(.Net 4.5)中测试过,它工作正常。你可以在这个预览中看到它:http://screencast.com/t/slucdqpK5 – Daniel 2013-03-04 14:09:27
反序列化不会接受一个对象,它必须如下。 反序列化
当然,它的工作原理,你介意给我显示其他文档吗?我已经添加了几个示例(包括指向Phil Hacck的博客的链接),显示了json模型绑定。 – Ulises 2013-03-04 15:15:46
增加了一个链接到ScottGu的博客 – Ulises 2013-03-04 15:29:18