简体   繁体   English

ASP.NET JSON反序列化

[英]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.

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