1

これは、fanart.tv Web サービス応答の JSON と C# の処理からの続きです。

したがって、アーティストの場合、主要な要素がアーティストと同じ名前である応答を取得します (したがって、Metallica の親指の Web サービスを呼び出します。ルートは Metallica と呼ばれ、Megadeth の場合は Megadeth と呼ばれます)。

前の質問はそれを解決しますが、次の段階はアルバムであり、これらの動的に名前が付けられた要素の 2 つのレベルを含むことになるため、特定のアルバムを検索すると、

{"Metallica":{"mbid_id":"65f4f0c5-ef9e-490c-aee3-909e7ae6b2ab","albums":{"f44f4f73-a714-31a1-a4b8-bfcaaf311f50":{"albumcover":[{"id":"51252","url":"http://assets.fanart.tv/fanart/music/65f4f0c5-ef9e-490c-aee3-909e7ae6b2ab/albumcover/kill-em-all-504c485914b25.jpg","likes":"2"}]}}}}

したがって、動的な名前を持つ同じトップレベルのアーティストの詳細がありますが、アルバムには MusicbrainzID にちなんで名付けられた要素があり、次に親指のコレクションがあります。

アーティストの詳細については、クラスを定義しました

public class ArtistThumbs
{
  public string Name { get; set; }

  [JsonProperty("mbid_id")]
  public string MusicBrainzID { get; set; }

  [JsonProperty("artistthumb")]
  public List<Thumb> Thumbs { get; set; }
}

public class Thumb
{
  [JsonProperty("id")]
  public string Id { get; set; }

  [JsonProperty("url")]
  public string Url { get; set; }

  [JsonProperty("likes")]
  public string Likes { get; set; }
}

次に、アーティストをJSONに逆シリアル化できます

var artistthumbs = JsonConvert.DeserializeObject<Dictionary<string, Artist>>(json);

問題は、これらのアルバムで同じことを行うにはどうすればよいかということです。JsonConvert.DeserializeObject可能であれば、私は本当に試して固執する必要があり、本当にクラスに逆シリアル化したいのですが、クラスをモデル化する方法がわかりません

4

1 に答える 1

1

他の質問と同じ考えです。JSON オブジェクトのプロパティ名を動的に変更する場合は常に、ディクショナリを使用する必要があります。これを処理するために、既存のクラスを簡単に拡張できます。

まず、アルバムのカバー サムのリストを保持する別のクラスを定義します。

class Album
{
    [JsonProperty("albumcover")]
    public List<Thumb> CoverThumbs { get; set; }
}

次に、ArtistThumbs クラスのプロパティに以下を追加します。

[JsonProperty("albums")]
public Dictionary<string, Album> Albums { get; set; }

次に、これまで行ってきたのとまったく同じように逆シリアル化できます。

var artistthumbs = JsonConvert.DeserializeObject<Dictionary<string, ArtistThumbs>>(json);

Albums プロパティにアルバムが含まれるようになりました。ディクショナリの各キーはアルバムの「MusicbrainzID」であり、各値は対応するアルバム情報です。

于 2013-07-06T19:43:56.477 に答える