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;  }


}

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; }
}
Sign up to request clarification or add additional context in comments.

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
}

Comments

Your Answer

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.