2015-02-06 40 views
0

我想導入JSON,解析它並能夠在整個我的應用程序中使用它。例如,我想循環並能夠打印出這些年份。我會怎麼做呢?如何從反序列化的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

?是否有例外? – 2015-02-06 20:01:12

+0

當你運行你給我們的代碼時會發生什麼?你似乎走在了正確的軌道上,所以很難說出目前的情況。 – Tim 2015-02-06 20:02:01

+0

基於他已經顯示出來,他似乎試圖解析它,並從第一眼看起來不正確 - http://stackoverflow.com/questions/6620165/how-to-parse-json-in-c – MethodMan 2015-02-06 20:02:18

回答

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 

旁註:你沒有反序列化到List<RootObject>RootObject應該是一個單一的實體(因爲它包裝了你的整個JSON數據)。所以簡單地將它反序列化爲一個實例,然後訪問DATA屬性並遍歷YEARMFG

+0

謝謝布拉德。這對我有效。我不確定這是否是這樣做的語義方式,但它確實起作用。似乎我可以脫離擁有一個DATA類而不是DATA和RootObject。 – 2015-02-06 20:18:57

+0

你需要'root'來破譯其中的'DATA'屬性。你可以使用'class RootObject {public DATA DATA {get;組; }}'如果這就是你所關心的。 – 2015-02-06 20:24:22

0

您正在反序列化List<RootObject>,因此List中的每個元素都是RootObject。您可以在您的班級中看到RootObject有一個DATA屬性,其中包含YEARMFGList<string>

您應該能夠訪問該項目在list像這樣:

list.DATA.YEARMFG會給你多年的列表給定的項目。

如果你想單獨顯示出來,您可以通過列表循環:什麼問題你目前有

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

我也這麼認爲。但它只出現我可以使用'列表'來添加,計數,添加範圍等...正常的Collections.List屬性。 – 2015-02-06 20:14:03