【问题标题】:Asp.net json deserializationAsp.net json 反序列化
【发布时间】:2013-12-07 16:59:32
【问题描述】:

我对 JSON 格式的反序列化服务器响应有疑问。我使用 JavaScriptSerializer,但我得到了 null。

{"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,"被选中” :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;  }


}

【问题讨论】:

    标签: c# asp.net .net json


    【解决方案1】:

    您的 json 包含属性名称,如 "0""1" 等,因此您必须使用一些技巧来正确反序列化 (Dictionary&lt;string,SomeClass&gt;)。

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

    【讨论】:

      【解决方案2】:

      您的 JSON 错误,与语法无关,而是与 JavaScriptSerializer 期望您的列表的结构方式有关。

      删除索引并使用常规数组,一切都按预期工作:

      {
          "Name": "BusinessSegmentFilter",
          "Items": [
              {
                  "ItemName": "1650",
                  "IsEditable": false,
                  "IsClicked": false,
                  "IsSelected": false
              }
          ],
          "MaxValue": null,
          "MinValue": null
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 2012-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-27
        • 1970-01-01
        相关资源
        最近更新 更多