使用ServiceStack.Text解析JSON问题

时间:2012-10-27 19:08:05

标签: c# .net json servicestack

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

当反序列化JSON时,库会错误地解析JSON,如您在下面图像的第二列中所见

enter image description here

这是JSON(简称为Snipped)

的一部分
{
"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"))

                        })

有人能发现问题吗?

2 个答案:

答案 0 :(得分: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; }
}

答案 1 :(得分:0)

您可以查看DataContractJsonSerializer。该序列化器专为此类作业而设计。

基本上你只需要定义一个带有一些datamember属性的类,剩下的就是自动完成的。请参阅DataContractSerializer的MSDN上的示例,它只使用xml执行相同的工作。