2015-02-06 35 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