排名第一的是JSon,C#

本文关键字:JSon | 更新日期: 2023-09-27 18:24:52

我从服务器收到JSon:

1) 音频的数量

2..n)关于音频的信息

response: [312, {
   aid: 217124599,
   owner_id: 49794861,
   artist: 'Hard Drum and Bass Pump Mix ',
   title: 'жёсткий драм... ',
   duration: 142,
   url: 'http://cs4401.vk.me/u133328801/audios/55c4eefd8b0d.mp3',
   lyrics_id: '66439474',
   genre: 12
}, {
   aid: 217122746,
   owner_id: 49794861,
   artist: 'Drum Trance ',
   title: 'лёгкий драм-транс...',
   duration: 209,
   url: 'http://cs5042.vk.me/u139126516/audios/f5ebe6d0f847.mp3',
   lyrics_id: '66430452',
   genre: 12
}, ...

我做下一个:

1) 在上创建方案JSon

2) 获取值

        public class JSonR
        {
            public List<Audio> response { get; set; }
        }
        public class Audio
        {
            public int aid { get; set; }
            public int owner_id { get; set; }
            public string artist { get; set; }
            public string title { get; set; }
            public int duration { get; set; }
            public string url { get; set; }
            public string lyrics_id { get; set; }
            public int genre { get; set; }
        }    
        var RespS = JsonConvert.DeserializeObject<JSonR>(responseFromServer);

如何获得第一个号码:312?

排名第一的是JSon,C#

Helper方法

public static class JsonHelper
{
    public static JToken ReadFrom(Stream stream)
    {
        using (var reader = new StreamReader(stream))
        using (var jsonReader = new JsonTextReader(reader))
            return JToken.ReadFrom(jsonReader);
    }
}

用法

JToken token = JsonHelper.ReadFrom(responseFromServer);
int number = token["response"][0].ToObject<int>();

如果我错误地假设responseFromServerStream,而它实际上只是string,那么你可以简单地这样做:

JToken token = JToken.Parse(responseFromServer);

难度

因为您的JSON数据使用异构的JSON数组,所以您需要采用类似于我上面给出的方法来获取数据。我不相信有任何"简单"的方法可以让JsonConvert.DeserializeObject<JSonR>按照你想要的方式工作。

可以做的是:

JToken token = JsonHelper.ReadFrom(responseFromServer);
int number = token["response"][0].ToObject<int>();
List<Audio> audioList = token["response"]
    .Children()
    .Skip(1) //skip over number
    .Select(child => child.ToObject<Audio>())
    .ToList();