将JSON对象反序列化为数组

时间:2013-12-07 22:34:58

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

我有一个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。 感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用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>());
        }
    }
}