Je suis en train de jouer avec l'API Last.FM en C#. Je n'ai pas beaucoup utilisé Json auparavant, donc c'est un peu nouveau pour moi.Désérialisation de json imbriqué avec des noms de variables non valides
JSON Je suis en train d'analyser ressemble
"{
\"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\"
}
},
Mon code désérialiser le JSON ressemble
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;
}
Mon code désérialiser les albums semblait fonctionner la plupart du temps correct au premier abord. Mais, quand je regarde la liste qui est retournée, pour chaque objet Album, ma liste d'images est vide et la variable de rang est nulle.
J'ai écrit du code qui va naviguer dans le tableau d'album dans le json, et juste analyser chaque album, mais il ne semble pas aussi bien. Je ne pense pas que j'ai correctement écrit JsonPropertys pour les classes Image et TopAlbum.
Voici mes objets de référence.
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; }
}
Merci! Je vais définitivement mettre en signet ce site. –