2017-08-30 11 views
0

私はC#のLast.FM APIを使いこなしています。私はずっと前にJsonを使用していないので、これは少し新しくなっています。無効な変数名でネストされたjsonを逆シリアル化する

私はJSONをデシリアライズする

"{ 
    \"topalbums\": { 
    \"album\": [ 
     { 
     \"name\": \"California (Deluxe Edition)\", 
     \"playcount\": \"89\", 
     \"mbid\": \"\", 
     \"url\": \"https: \/\/www.last.fm\/music\/blink-182\/California+(Deluxe+Edition)\", 
     \"artist\": { 
      \"name\": \"blink-182\", 
      \"mbid\": \"0743b15a-3c32-48c8-ad58-cb325350befa\", 
      \"url\": \"https: \/\/www.last.fm\/music\/blink-182\" 
     }, 
     \"image\": [ 
      { 
      \"#text\": \"https: \/\/lastfm-img2.akamaized.net\/i\/u\/34s\/ccd85fcfa4370e1df83a67c7fa79096c.png\", 
      \"size\": \"small\" 
      }, 
      { 
      \"#text\": \"https: \/\/lastfm-img2.akamaized.net\/i\/u\/64s\/ccd85fcfa4370e1df83a67c7fa79096c.png\", 
      \"size\": \"medium\" 
      }, 
      { 
      \"#text\": \"https: \/\/lastfm-img2.akamaized.net\/i\/u\/174s\/ccd85fcfa4370e1df83a67c7fa79096c.png\", 
      \"size\": \"large\" 
      }, 
      { 
      \"#text\": \"https: \/\/lastfm-img2.akamaized.net\/i\/u\/300x300\/ccd85fcfa4370e1df83a67c7fa79096c.png\", 
      \"size\": \"extralarge\" 
      } 
     ], 
     \"@attr\": { 
      \"rank\": \"1\" 
     } 
     }, 

私のコードのようなルックスを解析しようとしているJSONはアルバムをデシリアライズするために私のコードは、最初はほとんどが正常に動作するように見えた

public List<TopAlbum> GetTopAlbumsDeserialized(int limit) 
     { 
      List<TopAlbum> topAlbumList = new List<TopAlbum>(); 
      var request = (HttpWebRequest)WebRequest.Create(
       webServiceURL + "/2.0/?method=user.gettopalbums&user=" + user + "&api_key=" + key + "&format=json"); 
      if (limit > 0) 
      { 
       request = (HttpWebRequest)WebRequest.Create(
        webServiceURL + "/2.0/?method=user.gettopalbums&user=" + user + "&limit=" + limit 
        + "&api_key=" + key + "&format=json"); 
      } 
      request.ContentType = "application/json; charset=utf-8"; 
      request.Method = WebRequestMethods.Http.Get; 
      request.Accept = "application/json"; 
      var response = (HttpWebResponse)request.GetResponse(); 
      using (var sr = new StreamReader(response.GetResponseStream())) 
      { 
       string responseString = sr.ReadToEnd(); 
       sr.Close(); 
       JContainer jContainer = JObject.Parse(responseString); 
       JArray topAlbumsArray = JArray.FromObject(jContainer.First().First().First().First()); 
       JObject.FromObject(jContainer.First().First().First().First()["image"]); 
       topAlbumList = JsonConvert.DeserializeObject<List<TopAlbum>>(topAlbumsArray.ToString()); 
      } 
      return topAlbumList; 
     } 

のように見えます。しかし、返されるListを見ると、各Albumオブジェクトに対して、イメージリストは空であり、ランク変数はnullです。

私は、jsonのアルバム配列に移動し、各アルバムを解析するコードを書いていますが、それは見栄えが良くありません。私はImageクラスとTopAlbumクラスに対してJsonPropertysを正しく記述したとは思わない。

ここは参考までに私のオブジェクトです。

public class Album 
    { 
     public string name { get; set; } 
     public string playcount { get; set; } 
     public string mbid { get; set; } 
     public string url { get; set; } 
     public Artist artist { get; set; } 
     public List<Image> images { get; set; } 
    } 
public class TopAlbum : Album 
    { 
     public string rank { get; set; } 
    } 
public class Image 
    { 
     [JsonProperty("#text")] 
     public string text {get; set;} 
     public string size { get; set; } 
    } 
public class Artist 
    { 
     public string name { get; set; } 

     public string mbid { get; set; } 
     public string url { get; set; } 
    } 

答えて

1

this siteを使用して、あなたのモデルは、あなたが

var result = JsonConvert.DeserializeObject<RootObject>(json); 
+0

おかげようになりましデシリアライズすることができ、この

public class Artist { public string name { get; set; } public string mbid { get; set; } public string url { get; set; } } public class Image { [JsonProperty("#text")] public string text { get; set; } public string size { get; set; } } public class Attr { public string rank { get; set; } } public class Album { public string name { get; set; } public string playcount { get; set; } public string mbid { get; set; } public string url { get; set; } public Artist artist { get; set; } public List<Image> image { get; set; } [JsonProperty("@attr")] public Attr attr { get; set; } } public class Attr2 { public string user { get; set; } public string page { get; set; } public string perPage { get; set; } public string totalPages { get; set; } public string total { get; set; } } public class Topalbums { public List<Album> album { get; set; } [JsonProperty("@attr")] public Attr2 attr { get; set; } } public class RootObject { public Topalbums topalbums { get; set; } } 

ようにする必要があります! 確かにそのサイトをブックマークするつもりです。 –

関連する問題