2013-12-07 10 views
0

У меня есть API, который дает мне список похожих элементов, как и другой объект, а не как элементы массива. Давайте посмотрим _items узла, который содержит доступные пункты магазина:Удаление десериализации объектов JSON в массив

{ 
    "_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> 

где Деталь был класс с цветом и размером члена.

. Жаль, что я не могу изменить API. спасибо.

ответ

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>()); 
     } 
    } 
} 
+0

спасибо, он отлично работает. Я исправил JSON в своем примере кода. – pomarc

Смежные вопросы