[英]Asp.net json deserialization
I have problem with deserialization server response in JSON format. 我对JSON格式的反序列化服务器响应有疑问。 I use JavaScriptSerializer but I am getting null from it.
我使用JavaScriptSerializer,但从中获取空值。
{"0":{"Name":"BusinessSegmentFilter","Items":{"0":{"ItemName":"1650","IsEditable":false,"IsClicked":false,"IsSelected":false},"1":{"ItemName":"1457","IsEditable":false,"IsClicked":false,"IsSelected":false},"2":{"ItemName":"1649","IsEditable":false,"IsClicked":false,"IsSelected":false},"3":{"ItemName":"1651","IsEditable":false,"IsClicked":false,"IsSelected":false},"4":{"ItemName":"4480","IsEditable":false,"IsClicked":false,"IsSelected":false},"5":{"ItemName":"1692","IsEditable":false,"IsClicked":false,"IsSelected":false},"6":{"ItemName":"4012","IsEditable":false,"IsClicked":false,"IsSelected":false},"7":{"ItemName":"4198","IsEditable":false,"IsClicked":false,"IsSelected":false},"8":{"ItemName":"1652","IsEditable":false,"IsClicked":false,"IsSelected":false}},"MaxValue":null,"MinValue":null},"1":{"Name":"BusinessSegmentFilter","Items":{"0":{"ItemName":"1650","IsEditable":false,"IsClicked":false,"IsSelected":false},"1":{"ItemName":"1457","IsEditable":false,"IsClicked":false,"IsSelected":fa
{“ 0”:{“ Name”:“ BusinessSegmentFilter”,“ Items”:{“ 0”:{“ ItemName”:“ 1650”,“ IsEditable”:false,“ IsClicked”:false,“ IsSelected”:false} ,“ 1”:{“ ItemName”:“ 1457”,“ IsEditable”:false,“ IsClicked”:false,“ IsSelected”:false},“ 2”:{“ ItemName”:“ 1649”,“ IsEditable”: false,“ IsClicked”:false,“ IsSelected”:false},“ 3”:{“ ItemName”:“ 1651”,“ IsEditable”:false,“ IsClicked”:false,“ IsSelected”:false},“ 4” :{“ ItemName”:“ 4480”,“ IsEditable”:false,“ IsClicked”:false,“ IsSelected”:false},“ 5”:{“ ItemName”:“ 1692”,“ IsEditable”:false,“ IsClicked “:false,” IsSelected“:false},” 6“:{” ItemName“:” 4012“,” IsEditable“:false,” IsClicked“:false,” IsSelected“:false},” 7“:{” ItemName “:” 4198“,” IsEditable“:false,” IsClicked“:false,” IsSelected“:false},” 8“:{” ItemName“:” 1652“,” IsEditable“:false,” IsClicked“:false, “ IsSelected”:false}},“ MaxValue”:null,“ MinValue”:null},“ 1”:{“ Name”:“ BusinessSegmentFilter”,“ Items”:{“ 0”:{“ ItemName”:“ 1650 “,” IsEditable“:false,” IsClicked“:false,” IsSelected“:false},” 1“:{” ItemName“:” 1457“,” IsEditable“:false,” IsClicked“:false,” IsSelected“: F A lse},"2":{"ItemName":"1649","IsEditable":false,"IsClicked":false,"IsSelected":false},"3":{"ItemName":"1651","IsEditable":false,"IsClicked":false,"IsSelected":false},"4":{"ItemName":"4480","IsEditable":false,"IsClicked":false,"IsSelected":false},"5":{"ItemName":"1692","IsEditable":false,"IsClicked":false,"IsSelected":false},"6":{"ItemName":"4012","IsEditable":false,"IsClicked":false,"IsSelected":false},"7":{"ItemName":"4198","IsEditable":false,"IsClicked":false,"IsSelected":false},"8":{"ItemName":"1652","IsEditable":false,"IsClicked":false,"IsSelected":false}},"MaxValue":null,"MinValue":null}}
lse},“ 2”:{“ ItemName”:“ 1649”,“ IsEditable”:false,“ IsClicked”:false,“ IsSelected”:false},“ 3”:{“ ItemName”:“ 1651”,“ IsEditable “:false,” IsClicked“:false,” IsSelected“:false},” 4“:{” ItemName“:” 4480“,” IsEditable“:false,” IsClicked“:false,” IsSelected“:false},” 5“:{” ItemName“:” 1692“,” IsEditable“:false,” IsClicked“:false,” IsSelected“:false},” 6“:{” ItemName“:” 4012“,” IsEditable“:false, “ IsClicked”:false,“ IsSelected”:false},“ 7”:{“ ItemName”:“ 4198”,“ IsEditable”:false,“ IsClicked”:false,“ IsSelected”:false},“ 8”:{ “ ItemName”:“ 1652”,“ IsEditable”:false,“ IsClicked”:false,“ IsSelected”:false}},“ MaxValue”:null,“ MinValue”:null}}
var resposne = serializer.Deserialize<AjaxResposne>(eventArgument);
public class AjaxResposne
{
public string Name { get; set; }
public List<Item> Items { get; set; }
public string MaxValue { get; set; }
public string MinValue { get; set; }
}
public class Item
{
public string ItemName { get; set; }
public bool IsEditable { get; set; }
public bool IsClicked { get; set; }
public bool IsSelected { get; set; }
}
Your json contains property names like "0"
, "1"
etc., So you have to use some tricks to deserialize correctly ( Dictionary<string,SomeClass>
). 您的json包含属性名称,例如
"0"
, "1"
等,因此您必须使用一些技巧正确地反序列化( Dictionary<string,SomeClass>
)。
var obj = new JavaScriptSerializer()
.Deserialize<Dictionary<string,ItemCollection>>(json);
public class ItemCollection
{
public string Name { get; set; }
public string MaxVlaue { get; set; }
public string MinValue { get; set; }
public Dictionary<string, Item> Items { get; set; }
}
public class Item
{
public string ItemName { get; set; }
public bool IsEditable { get; set; }
public bool IsClicked { get; set; }
public bool IsSelected { get; set; }
}
Your JSON is wrong, not regarding syntax, but regarding the way the JavaScriptSerializer expects your lists to be structured. 您的JSON错误,与语法无关,与JavaScriptSerializer期望列表结构的方式有关。
Remove the indexes and use a regular array and everything works as expected: 删除索引并使用常规数组,一切将按预期工作:
{
"Name": "BusinessSegmentFilter",
"Items": [
{
"ItemName": "1650",
"IsEditable": false,
"IsClicked": false,
"IsSelected": false
}
],
"MaxValue": null,
"MinValue": null
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.