我正在使用ServiceStack.Text来解析WorldWeatherOnline's Marine Api。
当反序列化JSON时,库会错误地解析JSON,如您在下面图像的第二列中所见
这是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"))
})
有人能发现问题吗?
答案 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执行相同的工作。