我有一个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。谢谢
您可以使用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>());
}
}
}