2

我正在使用 ServiceStack.Text 来解析WorldWeatherOnline 的 Marine Api

反序列化 JSON 时,库会错误地解析 JSON,如下图的第二列所示

在此处输入图像描述

这是 JSON 的一部分(为简洁起见)

{
"data":{
  "nearest_area":[
     {
        "distance_miles":"36.8",
        "latitude":"53.965",
        "longitude":"0.456"
     }
   ]
 }
}

这是我试图反序列化的类

 public class Weather
{
    public NearestArea NearestArea { get; set; }

}

public class NearestArea
{
    public double? RetLatitude { get; set; }
    public double? RetLongitude { get; set; }
    public double? MilesFromReq { get; set; }
}

这是进行反序列化的代码

Weather result = JsonObject.Parse(content).Object("data").ConvertTo(x=> new Weather{


                        NearestArea = x.Object("nearest_area").ConvertTo(n => new NearestArea{

                            MilesFromReq = Convert.ToDouble(n.Get("distance_miles")),
                            RetLatitude = Convert.ToDouble(n.Get ("latitude")),
                            RetLongitude = Convert.ToDouble(n.Get ("longitude"))

                        })

谁能发现问题?

4

2 回答 2

3

下面的代码应该工作......

var weather = ServiceStack.Text.JsonSerializer.DeserializeFromString<RootWeather>(content);


public class RootWeather
{
    public Weather data { get; set; }

}

public class Weather
{
    public List<NearestArea> nearest_area { get; set; }

}

public class NearestArea
{
    public string latitude { get; set; }
    public string longitude { get; set; }
    public string distance_miles { get; set; }
}
于 2012-10-27T19:43:34.453 回答
0

您可能还会查看DataContractJsonSerializer。这个序列化器是为这样的工作而设计的。

基本上你只需要定义一个具有一些数据成员属性的类,其余的都是自动完成的。请参阅DataContractSerializer的 MSDN 上的示例,该示例仅使用 xml 完成相同的工作。

于 2012-10-27T19:11:00.307 回答