【问题标题】:c# iterate through jsonc# 遍历json
【发布时间】:2015-07-21 12:57:00
【问题描述】:

目前我正在使用 C# 开发 soundcloud 下载器。在 SoundCloud API 的帮助下,我得到了一个播放列表的 JSON 字符串,其中包含很多曲目信息:

http://pastebin.com/HfrjqyJE

我试过了:

JObject results = JObject.Parse(e.Result);
foreach (var result in results["tracks"])
{
     string streamUrl = (string)result["stream_url"];
     string title = (string)result["title"];
}

它有效,但它需要大约 20 秒来遍历只有 2 首曲目的播放列表。有没有办法让这个迭代过程更快?

【问题讨论】:

  • 你确定迭代需要 20 秒而不是下载吗?
  • 是的,因为要下载,我必须按另一个按钮。我用streamurl测试下载一首歌,一首歌只用了2-3秒。
  • 为什么不把得到的json对应的对象结构,然后反序列化呢?
  • 试过不使用调试器运行它吗?我有时会体验到,如果您附加了调试器和/或编译为调试器(没有优化),它会非常慢。因此,使用发布版本而不附加调试器来衡量性能

标签: c# json soundcloud


【解决方案1】:

您可以尝试使用Newtonsoft JSON Deserializer

对于您的情况,您可以这样做:

  1. 创建具有所需属性的 Track 类

  2. 应用反序列化对象

    Track jsonObject = JsonConvert.DeserializeObject<Track >(json);
    
  3. 遍历 jsonObject

【讨论】:

    【解决方案2】:

    也许使用 JProperty 循环遍历属性,性能更好?

        string json = "{a: 10, b: 'aaaaaa', c: 1502}";
    
        JObject parsedJson = JObject.Parse(json);
        foreach (JProperty property in parsedJson.Properties())
        {
            Console.WriteLine(string.Format("Name: [{0}], Value: [{1}].", property.Name, property.Value));
        }
    

    【讨论】:

    • 他并没有要求清楚。他问的是速度以及为什么需要 20 秒。
    • 我同意,我只是想确保这种方法不会表现得更好。为什么 ?我不知道。
    猜你喜欢
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 2011-10-05
    相关资源
    最近更新 更多