2015-02-06 6 views
0

Я пытаюсь импортировать JSON, разбирать его и использовать его во всем приложении. Например, я хотел бы пройти цикл и уметь печатать годы. Как мне это сделать?Как получить значения из объекта Deserialized JSON?

Код:

var result = await content.ReadAsStringAsync(); 

try 
{ 
    List<RootObject> list = (List<RootObject>)JsonConvert.DeserializeObject<List<RootObject>>(result); 

} 

catch (Exception e) { 
    Console.WriteLine (e); 
} 

JSON:

{ 
    "ROWCOUNT": 3, 
    "COLUMNS": [ 
     "YEARMFG", 
     "MAKE", 
     "MODEL", 
     "ENGINE", 
     "TOWLIMIT", 
     "NOTE1", 
     "NOTE2" 
    ], 
    "DATA": { 
     "YEARMFG": [ 
      2012, 
      2012, 
      2012 
     ], 
     "MAKE": [ 
      "Chevrolet/GMC", 
      "Chevrolet/GMC", 
      "Chevrolet/GMC" 
     ], 
     "MODEL": [ 
      "Avalanche 1500 4WD", 
      "Avalanche 1500 4WD", 
      "Avalanche 1500 4WD" 
     ], 
     "ENGINE": [ 
      "5.3L V-8", 
      "5.3L V-8", 
      "5.3L V-8" 
     ], 
     "TOWLIMIT": [ 
      5000, 
      5500, 
      8000 
     ], 
     "NOTE1": [ 
      "3.08 axle ratio", 
      "3.42 axle ratio", 
      "3.42 axle ratio" 
     ], 
     "NOTE2": [ 
      "", 
      "", 
      "Cooling or other accessory package required " 
     ] 
    } 
} 

Классы:

public class DATA 
{ 
    public List<int> YEARMFG { get; set; } 
    public List<string> MAKE { get; set; } 
    public List<string> MODEL { get; set; } 
    public List<string> ENGINE { get; set; } 
    public List<int> TOWLIMIT { get; set; } 
    public List<string> NOTE1 { get; set; } 
    public List<string> NOTE2 { get; set; } 
} 

public class RootObject 
{ 
    public int ROWCOUNT { get; set; } 
    public List<string> COLUMNS { get; set; } 
    public DATA DATA { get; set; } 
} 
+1

Какие проблемы вы в настоящее время имеющий? Есть ли исключение? –

+0

Что происходит, когда вы запускаете код, который вы нам дали? Вы, кажется, на правильном пути, поэтому трудно сказать, что в настоящее время отключает вас. – Tim

+0

Основываясь на том, что он показал, кажется, что он пытается разобрать его, и с первого взгляда он выглядит некорректно - http://stackoverflow.com/questions/6620165/how-to-parse-json-in-c – MethodMan

ответ

4

Предполагая, что ваши объекты и GetJson() просто возвращает строку JSON:

var obj = JsonConvert.DeserializeObject<RootObject>(GetJSON()); 
foreach (var year in obj.DATA.YEARMFG) 
{ 
    Console.WriteLine("Year: {0}", year); 
} 

Какой должен вывести (на основе данных выборки):

Year: 2012 
Year: 2012 
Year: 2012 

Side Примечание: Вы не должны десериализации к List<RootObject>. RootObject должен быть единственным объектом (поскольку он обертывает все ваши данные JSON). Поэтому просто десериализуйте его в один экземпляр, затем войдите в свойство DATA и выполните итерацию по YEARMFG.

+0

Спасибо, Брэд. Это сработало для меня. Я не уверен, что это семантический способ сделать это, но он действительно сработал. Похоже, я мог просто уйти, имея класс DATA вместо DATA и RootObject. –

+0

Вам нужно 'root', чтобы расшифровать свойство' DATA' внутри. Вы можете просто использовать 'class RootObject {public DATA DATA {get; задавать; }} 'если это все, о чем вы заботитесь, хотя. –

0

Вы десериализируете List<RootObject>, поэтому каждый элемент в List является RootObject. Вы можете видеть в своем классе, что RootObject имеет имущество DATA, которое содержит List<string>YEARMFG.

Вы должны иметь возможность доступа к элементам в вашем list так:

list.DATA.YEARMFG даст вам список лет для данного пункта.

Если вы хотите, чтобы отобразить их по отдельности, вы можете цикл по списку:

foreach (var yr in list.DATA.YEARMFG) 
{ 
    // handle individual year info here 
} 
+0

Я тоже думал об этом. Но только кажется, что я могу использовать 'list' для добавления, подсчета, добавления диапазона и т. Д. ... обычных свойств Collections.List. –

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