从第一个JsonArray获取特定数据

时间:2018-02-14 08:51:54

标签: c# json parsing json.net

我正在尝试从以下格式返回数据的API中获取数据:

[{
    "song": {
        "id": 12345,
        "track": "TRACK A",
        "artist": "ARTIST A"
    },
    "playedtime": "2018-02-14T09:07:15.976"
}, {
    "song": {
        "id": 54321,
        "track": "TRACK B",
        "artist": "ARTIST B"
    },
    "playedtime": "2018-02-14T09:03:29.355"
}]

我只需要获取第一个trackartist条目,在上面的例子中是“TRACK A”和“ARTIST A”。

到目前为止,我所做的可能是错误的是:

string response = await client.GetStringAsync(uri);
JArray parser = JArray.Parse(response);
rootTrack = JObject.Parse(parser.First.ToString())["track"].ToString();
rootArtist = JObject.Parse(parser.First.ToString())["artist"].ToString();

1 个答案:

答案 0 :(得分:2)

我建议您按如下方式创建数据的c#表示:

public class Song
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("track")]
    public string Track { get; set; }

    [JsonProperty("artist")]
    public string Artist { get; set; }
}

public class PlayListItem
{
    [JsonProperty("song")]
    public Song Song { get; set; }

    [JsonProperty("playedtime")]
    public DateTime PlayedTime { get; set; }
}

然后,您可以使用JSON.net反序列化您的JSON数据并访问所需的属性,如下所示:

List<PlayListItem> playList = JsonConvert.DeserializeObject<List<PlayListItem>>(response);

PlayListItem firstItem = playList.First();
string track = firstItem.Song.Track;
string artist = firstItem.Song.Artist;