必须从API调用反序列化JSON。在下面发布JSON蒸汽。必须得到每个“区域”节点。请注意,其中有些有孩子的孩子(这是我遇到的麻烦)。昨天这个时候之前,我甚至不知道JSON是什么(说我已经出去一段时间了)。
我已经知道的是:是否让Netwonsoft.Json引用将其转换为XML以查看这是否有帮助,但认为保留JSON会有更好的性能。
vb.net类具有以下属性: Area_Name作为字符串(JSON中的"ID“)、Area_ID作为字符串(JSON中的”名称“)、Parent_ID作为字符串(在JSON中为父”ID“)
因此,需要知道从哪里开始从下面的JSON中提取所有节点。-JSON流
{"areas":
[{"id":"1353331688024941487","name":"NGT","children":
[{"id":"1353331688024941488","name":"Other","children":
[
{"id":"1353331688024941489","name":"Independence Office","children":[]},
{"id":"1353331688024941490","name":"Lordstown Pipe Receipt Site (PRS)","children":[]},
{"id":"1353331688024941491","name":"Marion Pipe Receipt Site (PRS)","children":[]},
{"id":"1353331688024941492","name":"Marion Warehouse Facility","children":[]},
{"id":"1353331688024941493","name":"Port of Toledo Pipe Receipt Site (PRS)","children":[]},
{"id":"1353331688024941494","name":"Spread -1 - No facility","children":[]},
{"id":"1353331688024941495","name":"Spread -2 - Wadsworth Office","children":[]},
{"id":"1353331688024941496","name":"Spread -3 - Toledo Office","children":[]},
{"id":"1353331688024941497","name":"Spread -4 - Dundee Office","children":[]}
]
},
{"id":"1353331688024941498","name":"Spread-1","children":
[
{"id":"1353331688024941499","name":"Compressor Station 1","children":[]},
{"id":"1353331688024941500","name":"Field Inspectors 1","children":[]},
{"id":"1353331688024941501","name":"Meter Station 1","children":[]},
{"id":"1353331688024941502","name":"Meter Station 2","children":[]},
{"id":"1353331688024941503","name":"Meter Station 3","children":[]},
{"id":"1353331688024941504","name":"NDE Testing 1","children":[]},
{"id":"1353331688024941505","name":"Pipeline 1","children":[]},
{"id":"1353331688024941506","name":"Wareyard 1-1","children":[]}
]
},
{"id":"1353331688024941507","name":"Spread-2","children":
[
{"id":"1353331688024941508","name":"Compressor Station 2","children":[]},
{"id":"1353331688024941509","name":"Field Inspectors 2","children":[]},
{"id":"1353331688024941510","name":"Meter Station 5","children":[]},
{"id":"1353331688024941511","name":"NDE Testing 2","children":[]},
{"id":"1353331688024941512","name":"Pipeline 2","children":[]},
{"id":"1353331688024941513","name":"Wareyard 2-1","children":[]}
]
},
{"id":"1353331688024941514","name":"Spread-3","children":
[
{"id":"1353331688024941515","name":"Compressor Station 3","children":[]},
{"id":"1353331688024941516","name":"Compressor Station 4","children":[]},
{"id":"1353331688024941517","name":"Field Inspectors 3","children":[]},
{"id":"1353331688024941518","name":"Meter Station 6","children":[]},
{"id":"1353331688024941519","name":"NDE Testing 3","children":[]},
{"id":"1353331688024941520","name":"Pipeline 2","children":[]},
{"id":"1353331688024941521","name":"Wareyard 3-1","children":[]}
]
},
{"id":"1353331688024941522","name":"Spread-4","children":
[
{"id":"1353331688024941523","name":"Field Inspectors 4","children":[]},
{"id":"1353331688024941524","name":"Meter Station 4","children":[]},
{"id":"1353331688024941525","name":"NDE Testing 4","children":[]},
{"id":"1353331688024941526","name":"Pipeline 4","children":[]},
{"id":"1353331688024941527","name":"Wareyard 4-1","children":[]},
{"id":"1353331688024941528","name":"Wareyard 4-3","children":[]},
{"id":"1353331688024941529","name":"Wareyard 4-4","children":[]}
]
}
]
}
]
}谢谢谢谢你的帮助。
发布于 2017-01-12 15:32:07
您需要多一个类"AreaModel“,其中包含一个属性”区域“。因此,您的类应该如下所示。
public class AreaModel
{
public List<Area> Areas { get; set; }
}
public class Area
{
[JsonProperty(PropertyName = "id")]
public string Area_Name
{
get;
set;
}
[JsonProperty(PropertyName = "name")]
public string Area_ID {get;set;}
[JsonProperty(PropertyName= "children")]
public List<Area> Children
{
get;set;
}
}然后,您可以按以下方式反序列化JSON字符串。
var areaModel = JsonConvert.DeserializeObject<AreaModel>(areaJSON);
foreach (var area in areaModel.Areas)
{
DisplayAreas(area);
}
private static void DisplayAreas(Area area)
{
Console.WriteLine(area.Area_Name);
if(area.Children != null && area.Children.Count > 0)
{
foreach(var child in area.Children)
{
DisplayAreas(child);
}
}
}发布于 2017-01-12 15:55:29
Visual将创建您需要的类,或者您可以使用在线机器人。在VS中,使用剪贴板上的JSON,编辑 -> 粘贴特殊 -> ,将JSON粘贴为类
这两个类都比较密集,因为它们不会认识到Child类实际上是相同的,您可以对两者使用相同的类。实际上,-- Area和Child类--也是相同的:
Public Class AreaContainer
Public Property areas As AreaItem()
End Class
Public Class AreaItem
Public Property id As String
Public Property name As String
Public Property children As AreaItem() ' no need for a Child1
End Class反序列化:
Dim jstr = ...wherever you get it
Dim myareas = JsonConvert.DeserializeObject(Of AreaContainer)(jstr)我不知道你想要什么,但这会打印出NGT.Other孩子的名字和他们的孩子的数量。
For n As Int32 = 0 To myareas.areas(0).children(0).children.Count - 1
Console.WriteLine("Name {0} => children: {1}",
myareas.areas(0).children(0).children(n).name,
myareas.areas(0).children(0).children(n).children.Count)
Next名称独立办公室=>儿童:0 Lordstown管道接收站点(PRS) =>子站点名称:0 =>儿童名称:0 命名设施=>儿童:0 名称托莱多管道接收站(PRS) =>子站点:0 名称传播-1 -没有设施=>儿童:0 名称传播-2 -沃兹沃思办公室=>儿童:0 名称传播-3 -托莱多办公室=>儿童:0 名称传播-4 -邓迪办公室=>儿童:0
如这里的其他文章所示,您可以通过首先解析JSON,将areas部分反序列化为数组,从而简化代码必须处理的结果对象。它删除了myAreas变量和AreaContainer类,这两个类都没有什么用处。
https://stackoverflow.com/questions/41616369
复制相似问题