2

WorldWeatherOnline の Marine Apiを解析するために ServiceStack.Text を使用しています。

下の画像の 2 列目に示すように、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もご覧ください。このシリアライザーは、そのようなジョブ用に作成されています。

基本的に、いくつかのデータメンバー属性を持つクラスを定義する必要があるだけで、残りは自動的に行われます。xml だけで同じ仕事をするDataContractSerializerの MSDN の例を参照してください。

于 2012-10-27T19:11:00.307 に答える