0

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; }
}
Damon
3,0207 gold badges26 silver badges28 bronze badges
asked Dec 7, 2013 at 16:59

2 Answers 2

2

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; }
}
answered Dec 7, 2013 at 17:34

Comments

1

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
}
answered Dec 7, 2013 at 17:38

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.