我看过this post,但现在我在使用它时遇到了麻烦。
鉴于以下Google Maps JSON字符串(我使用Blitzmap.js
中使用的数据结构):
{
"zoom":12,
"overlays":[
{
"type": "polygon",
"paths":[
[
{ "lat":52.06630340325415, "lng":5.749811642494365 },
{ "lat":52.066277072534014, "lng":5.758523457374736 },
{ "lat":52.06306460782621, "lng":5.758544915046855 },
{ "lat":52.063011942539184, "lng":5.749811642494365 }
]
]
}
],
"center":{ "lat":52.06465767289667, "lng":5.75417827877061 }
}
使用Newtonsoft.JSON时,我可以这样做:
dynamic mapObjectsAsDynamic = (JObject)formPostedData.MapObjects;
foreach (var overlay in mapObjectsAsDynamic.overlays)
{
if (overlay.type == "polygon")
{
foreach (var pathpart in overlay.paths)
{
foreach (var pathItem in pathpart.Children())
{
... = pathItem.lat;
... = pathItem.lng;
}
}
}
}
现在我喜欢使用ServiceStack的JSON解析器(ServiceStack.Text),但我被卡在paths
上。
我试过了:
var mapObjectsAsJsonObject = JsonObject.Parse(request.MapObjects);
var trial1 = mapObjectsAsJsonObject.ArrayObjects("overlays");
var trial2 = trial1[0].ArrayObjects("paths");
是否有类似Newtonsoft的方式?
答案 0 :(得分:1)
您可以使用.JsonTo<T>
扩展程序将paths
密钥转换为Point[][]
,然后就可以轻松遍历该集合。
简单Point
类:
public class Point
{
public float lat { get; set; }
public float lng { get; set; }
}
用法(与JSON.NET中的用法类似)
var mapObjects = JsonObject.Parse(request.MapObjects);
foreach(var overlay in mapObjects.ArrayObjects("overlays"))
{
if(overlay.Get("type")=="polygon")
{
foreach(var pathPart in overlay.JsonTo<Point[][]>("paths"))
{
foreach(var pathItem in pathPart)
{
Console.WriteLine(pathItem.lat);
Console.WriteLine(pathItem.lng);
}
}
}
}
我希望这会有所帮助。