我有一个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。 感谢。
答案 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>());
}
}
}