如何从反序列化的JSON对象中获取值?
我想导入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; }
}
假设你的对象和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
。
谢谢布拉德。这对我有效。我不确定这是否是这样做的语义方式,但它确实起作用。似乎我可以脱离拥有一个DATA类而不是DATA和RootObject。 – 2015-02-06 20:18:57
你需要'root'来破译其中的'DATA'属性。你可以使用'class RootObject {public DATA DATA {get;组; }}'如果这就是你所关心的。 – 2015-02-06 20:24:22
您正在反序列化List<RootObject>
,因此List
中的每个元素都是RootObject
。您可以在您的班级中看到RootObject
有一个DATA
属性,其中包含YEARMFG
的List<string>
。
您应该能够访问该项目在list
像这样:
list.DATA.YEARMFG
会给你多年的列表给定的项目。
如果你想单独显示出来,您可以通过列表循环:什么问题你目前有
foreach (var yr in list.DATA.YEARMFG)
{
// handle individual year info here
}
我也这么认为。但它只出现我可以使用'列表'来添加,计数,添加范围等...正常的Collections.List属性。 – 2015-02-06 20:14:03
?是否有例外? – 2015-02-06 20:01:12
当你运行你给我们的代码时会发生什么?你似乎走在了正确的轨道上,所以很难说出目前的情况。 – Tim 2015-02-06 20:02:01
基于他已经显示出来,他似乎试图解析它,并从第一眼看起来不正确 - http://stackoverflow.com/questions/6620165/how-to-parse-json-in-c – MethodMan 2015-02-06 20:02:18