Reputation: 1167
I have problem with deserialization server response in JSON format. I use JavaScriptSerializer but I am getting null from it.
{"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":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}}
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; }
}
Upvotes: 0
Views: 117
Reputation: 5377
Your JSON is wrong, not regarding syntax, but regarding the way the JavaScriptSerializer expects your lists to be structured.
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
}
Upvotes: 1
Reputation: 116178
Your json contains property names like "0"
, "1"
etc., So you have to use some tricks to deserialize correctly (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; }
}
Upvotes: 2