【问题标题】:Deserializing JSON objects to an array将 JSON 对象反序列化为数组
【发布时间】:2013-12-07 22:34:57
【问题描述】:

我有一个 API,它给我一个类似项目的列表作为不同的对象,而不是作为数组的成员。让我们看看 _items 节点,它包含商店中的可用商品:

{
    "_ok":200,

    "_store":
          {
           "location":"Rome",
           "open":true
          },
    "_items":
         {
            "itemA":{ "color":"blue","size":3},
            "itemB":{ "color":"red","size":1},
            "itemC":{ "color":"cyan","size":3},
            "itemD":{ "color":"yellow","size":0},
          }

}

我正在使用非常好的 Newtonsoft JSON.NET 进行反序列化,但我不知道如何获取项目列表。它的列表是一个数组,比如说:

"_items":{["itemA":{ "color":"blue","size":3},"itemB":...

我猜想使用 JsonConvert 来获得一个

List<Item> 

其中 Item 是具有颜色和大小成员的类。

。太糟糕了,我无法更改 API。 谢谢。

【问题讨论】:

    标签: c# .net arrays json json.net


    【解决方案1】:

    您可以使用JsonExtensionDataAttribute 来存储项目,并使用属性将它们转换为Item 实例。

    [JsonProperty("_items")]
    private ItemsContainer _items;
    
    
    [JsonObject(MemberSerialization.OptIn)]
    class ItemsContainer
    {
        [JsonExtensionData]
        private IDictionary<string, JToken> _items;
    
        public IEnumerable<Item> Items
        {
            get
            {
                return _items.Values.Select(i => i.ToObject<Item>());
            }
        }
    }
    

    【讨论】:

    • 谢谢,它运行良好。我已在示例代码中修复了 JSON。
    猜你喜欢
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多