0

最初のJSONは次のようになります

2番目のJSONは次のようになります

どうすればそれらを逆シリアル化できますか?私はこの例に従いましたが、機能していません。これが私のコードです。

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            var w = new WebClient();
            Observable
              .FromEvent<DownloadStringCompletedEventArgs>(w, "DownloadStringCompleted")
              .Subscribe(r =>
              {
                  var deserialized =
                    JsonConvert.DeserializeObject<List<Place>>(r.EventArgs.Result);
                  PlaceList.ItemsSource = deserialized;
              });
            w.DownloadStringAsync(
              new Uri("http://mobiilivantaa.lightscreenmedia.com/api/place"));

            //For 2nd JSON
            //w.DownloadStringAsync(
                 //new Uri("http://mobiilivantaa.lightscreenmedia.com/api/place/243"));

        }

これらは1番目のJSONのクラスです。

        public class Place
        {
            public string id { get; set; }
            public string title { get; set; }
            public string latitude { get; set; }
            public string longitude { get; set; }
            public string www { get; set; }
        }

        public class RootObjectJSON1
        {
            public List<Place> Places { get; set; }
        }

これらはJSON2のクラスです

public class Address
{
    public string street { get; set; }
    public string postal_code { get; set; }
    public string post_office { get; set; }
}

public class Image
{
    public string id { get; set; }
    public string filename { get; set; }
    public string path { get; set; }
}

public class RootObjectJSON2
{
    public string id { get; set; }
    public string title { get; set; }
    public string description { get; set; }
    public string latitude { get; set; }
    public string longitude { get; set; }
    public string www { get; set; }
    public string phone { get; set; }
    public string email { get; set; }
    public string contact_person { get; set; }
    public Address address { get; set; }
    public List<Image> images { get; set; }
}
4

1 に答える 1

2

オブジェクトRootObjectJSON1またはRootObjectJSON2を逆シリアル化する必要があるようです。例:

var deserialized = JsonConvert.DeserializeObject<RootObjectJSON1>(r.EventArgs.Result);

また、コレクションPlacesは最初に小文字のpを使用する必要があるようです。または、このプロパティを別の名前で逆シリアル化する必要があることをJson.NETに通知する必要があります。例:

[JsonProperty(PropertyName="places")]
public List<Place> Places { get; set; }

一般的に、私は逆シリアル化に配列を使用する傾向があるので(私の経験から、よりうまく機能します)、次のように書き直すことをお勧めします。

public class RootObjectJSON1
{
    public Place[] places { get; set; }
}

http://json2csharp.com/で利用可能なjson2csharpという名前の非常に優れたツールがあります-そこにJSONのサンプルを置くだけで、C#でクラスが吐き出されます(DateTimeを検出しないため、変更する必要がある場合があります)。

于 2013-01-07T07:06:14.210 に答える