2012-04-02 125 views
3

我已经返回的Json如下所示:解析多维JSON阵列与Newtonsoft Json.NET

[{ “CreatedBy”: “GIS_DB”, “CreatedDate”:“2012/3/8 10点44:AM“,”Id“:39,”ModifiedBy“:”“ModifiedDate”:“”,“Name”:“CF-39”,“StatusId”:1,“TrailCoordinates”:[{“CreatedBy” :“GIS_DB”,“CreatedDate”:“3/8/2012 10:44:00 AM”,“Id”:1637,“Latitude”:32.76004207,“Longitude”: - 97.34006853,“ModifiedBy”:“ ,“ModifiedDate”:“”,“SortOrder”:1,“TrailId”:39},{“CreatedBy”:“GIS_DB”,“CreatedDate”:“3/8/2012 10:44:00 AM”, “ID”:1638, “纵横”:32.76004333, “经度”: - 97.34012121, “ModifiedBy”: “”,“修改日期“:”“,”SortOrder“:2,”TrailId“:39}]},{”CreatedBy“:”GIS_DB“,”CreatedDate“:”3/8/2012 10:44:00 AM“ “ID”:40 “ModifiedBy”: “”, “ModifiedDate”: “”, “名称”: “CF-40”, “StatusId”:1, “TrailCoordinates”:[{ “CreatedBy”: “GIS_DB”, “CreatedDate”:“3/8/2012 10:44:00 AM”,“Id”:3755,“Latitude”:32.76034332,“Longitude”: - 97.3402069,“ModifiedBy”:“”,ModifiedDate“: “”,“SortOrder”:1,“TrailId”:40},{“CreatedBy”:“GIS_DB”,“CreatedDate”:“3/8/2012 10:44:00 AM”,“Id”:3756 “纬度”:32.76019181, “经度”: - 97.3402448, “ModifiedBy”: “”, “ModifiedDate”: “”, “SortOrder的”:2 “TrailId”:40}]}]

这些我的课是...

public class Trails 
{ 
    [MonoTouch.Foundation.Preserve] 
    public Trails(){ TrailCoord = new List<trailcoords>();} 

    [MonoTouch.Foundation.Preserve, JsonProperty("Name")] 
    public string TrailName { get; set; } 

    [MonoTouch.Foundation.Preserve, JsonProperty("StatusId")] 
    public int StatusId { get; set; } 

    [MonoTouch.Foundation.Preserve, JsonProperty("TrailCoordinates")] 
    public List<trailcoords> TrailCoord { get; set; } 
// public trailcoords 

public Trails (string trailname, int statusid, List<trailcoords> trailcoord) 
{ 
    TrailName = trailname; 
     StatusId = statusid; 
     TrailCoord = trailcoord; 
    }  
} 

public class trailcoords 
{  
     [MonoTouch.Foundation.Preserve] 
    public trailcoords(){} 
[MonoTouch.Foundation.Preserve, JsonProperty("TrailId")] 
    public string TrailId { get; set; }  

    [MonoTouch.Foundation.Preserve, JsonProperty("Latitude")] 
    public double Latitude { get; set; }  
[MonoTouch.Foundation.Preserve, JsonProperty("Longitude")] 
    public double Longitude { get; set; } 

public trailcoords (string trailid, double latitude, double longitude) 
{ 
    TrailId = trailid; 
     Latitude = latitude; 
     Longitude = longitude; 
    } 
} 

List<Trails> Posts = JsonConvert.DeserializeObject<List<Trails>> (json); 

所以从这里我不知道我将如何访问我的列表中的纬度和经度项目。我可以访问像TrailName这样的东西没有问题,但不知道我在做什么错误的数组内的项目。我想补充他们,这样我可以绘制它们作为一个结构线与此类似,我把(硬编码值):

CLLocationCoordinate2D[] tmpTrail1 = new CLLocationCoordinate2D[]{ 
    new CLLocationCoordinate2D(32.751531, -97.361755), 
    new CLLocationCoordinate2D(32.751451, -97.356625), 
    new CLLocationCoordinate2D(32.751500, -97.332077), 
}; 

CLLocationCoordinate2D[] tmpTrail2 = new CLLocationCoordinate2D[] { 
    new CLLocationCoordinate2D(32.727353, -97.361139), 
    new CLLocationCoordinate2D(32.747731, -97.359896), 
    new CLLocationCoordinate2D(32.765735, -97.360360), 
}; 

_trailOverlayPoints = new List<CLLocationCoordinate2D[]>(); 
_trailOverlayPoints.Add(tmpTrail1); 
_trailOverlayPoints.Add(tmpTrail2); 

回答

11

而是宣布了很多课,我会解析JSON字符串如下

JArray jArr = (JArray)JsonConvert.DeserializeObject(jsonstr); 
foreach (var item in jArr) 
{ 
    foreach(var subitem in item["TrailCoordinates"]) 
    { 
     Console.WriteLine(subitem["Longitude"] + " " + subitem["Latitude"]); 
    } 
} 

如果MonoTouch的支持dynamic你也可以写

dynamic jArr2 = JsonConvert.DeserializeObject(jsonstr); 
foreach (dynamic item in jArr2) 
{ 
    foreach (var subitem in item.TrailCoordinates) 
    { 
     Console.WriteLine(subitem.Longitude + " " + subitem.Latitude); 
    } 
} 

你甚至可以使用LINQ

JArray jArr = (JArray)JsonConvert.DeserializeObject(jsonstr); 
var coords = jArr 
      .Select(x => x["TrailCoordinates"]) 
      .SelectMany(x=>x) 
      .Where(x => x["TrailId"].ToString() == "40") 
      .Select(x => new { Lat = double.Parse(x["Latitude"].ToString()), Lon=double.Parse(x["Longitude"].ToString()) }) 
      .ToArray(); 
+0

谢谢你太棒了!使用Linq将能够放入一个“where”子句,以便它只返回特定线索的坐标? – k1komans 2012-04-02 13:16:56

+0

@ user1288686为什么不呢?我更新了答案。 – 2012-04-02 16:18:51

+0

很好的答案。谢谢 – 2015-03-04 23:41:21