C# Невозможно десериализовать текущий JSON объект (Newtonsoft) - PullRequest
0 голосов
/ 23 марта 2020

Как мне получить этот массив в виде строки? к сожалению (я новичок), я знаю, как получить только массивы или только объекты, но не умею «смешивать»

enter image description here

    public class TrackContent
    {
        [JsonProperty("track")] public Album Album { get; set; }
    }

    public class Album
    {
        [JsonProperty("album")] public CoverImage CoverImage { get; set; }
    }

    public class CoverImage
    {
        [JsonProperty("image")] public Number Number { get; set; }
    }

    public class Number
    {
        [JsonProperty("3")] public ImageUrl ImageUrl { get; set; }
    }

    public class ImageUrl
    {
        [JsonProperty("#text")] public string Name { get; set; }
    }

    private static void Main(string[] args)
    {
        const string auth = "http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key=XXXXXXXXXXXXXXXXXXX&artist=Ariana%20Grande&track=One%20Last%20Time&format=json";

        var httpClient = new HttpClient();
        var jsonInfo = httpClient.GetStringAsync(auth);
        var deserializeJson = JsonConvert.DeserializeObject <TrackContent>(jsonInfo.Result);
        Console.WriteLine(deserializeJson.Album.CoverImage.Number.ImageUrl.Name);
    }

Ответы [ 2 ]

4 голосов
/ 23 марта 2020
public class Streamable
{
    [JsonProperty("#text")] public string text { get; set; }
    public string fulltrack { get; set; }
}

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 position { get; set; }
}

public class Album
{
    public string artist { get; set; }
    public string title { get; set; }
    public string mbid { get; set; }
    public string url { get; set; }
    public List<Image> image { get; set; }
    [JsonProperty("@attr")] public Attr attr { get; set; }
}

public class Tag
{
    public string name { get; set; }
    public string url { get; set; }
}

public class Toptags
{
    public List<Tag> tag { get; set; }
}

public class Track
{
    public string name { get; set; }
    public string mbid { get; set; }
    public string url { get; set; }
    public string duration { get; set; }
    public Streamable streamable { get; set; }
    public string listeners { get; set; }
    public string playcount { get; set; }
    public Artist artist { get; set; }
    public Album album { get; set; }
    public Toptags toptags { get; set; }
}

public class RootObject
{
    public Track track { get; set; }
}

Тогда:

var deserializeJson = JsonConvert.DeserializeObject<RootObject>(jsonInfo.Result);
Console.WriteLine(deserializeJson.Album.image[3].text);

Редактировать: Таким образом, вы можете десериализовать любой JSON ответ от API в C# RootObject и получить доступ к любому из свойств / ценит вас sh.

3 голосов
/ 23 марта 2020

Я предлагаю использовать такой инструмент, как этот http://json2csharp.com/, чтобы сгенерировать ваши C# классы из строки JSON.

Затем вы получите нужные вам классы, и затем вы можете десериализовать «RootObject» с помощью Newtonsoft.

Edit:
И если вы хотите go другим способом, тогда этот инструмент может быть полезен https://csharp2json.io/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...