1

我从服务器收到 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?

4

1 回答 1

3

辅助方法

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>();

如果我做了一个错误的假设,那responseFromServer就是 aStream并且它实际上只是 a 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();
于 2013-07-25T16:46:40.957 回答