简体   繁体   中英

Asp.net json deserialization

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":fa 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> ).

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.

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
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM