【问题标题】:Retrieving Number of Objects from JSON String in C#在 C# 中从 JSON 字符串中检索对象的数量
【发布时间】:2012-01-05 16:52:09
【问题描述】:

我在下面有一个 JSON 字符串:

{
  "data": [
    {
      //data for first
    }, 
    {
      //data for second
    }, 
    {
      //data for third
    }, 
  ]
}

从这个 JSON 字符串中,我想检索 "data" 元素中的对象数,在本例中为 3。

实现这一目标的最佳方法是什么?我使用了.Length 属性,但它返回了一个我没想到的数字。

我正在使用 C#。

【问题讨论】:

  • 我目前正在将 JSON 读入字符串,但我正在研究使用 JSON 解析器。你有什么建议吗?
  • 我强烈推荐 Json.NET(参见 james.newtonking.com/pages/json-net.aspx)。另请参阅下面的答案以获取示例用法。
  • .Length 将为您提供String 中的字符数。要查找对象,您需要使用 JavaScriptSerializerDataContractJsonSerializer 反序列化 JSON,这两者都需要兼容的类型。或者,您可以使用许多第三方程序集之一,或者滚动您自己的反序列化器(不推荐),或者最后您可以计算大括号的数量,考虑打开、关闭和嵌套并以此方式推断计数。

标签: c# json


【解决方案1】:

由于它是 C# 中的字符串,因此您需要先将其解析为可以使用的内容。这是使用框架类的简单方法。

//obj is your JSON string

var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
Dictionary<string,object> csObj = 
    serializer.Deserialize<Dictionary<string,object>>(obj);
int length = ((ArrayList)csObj["data"]).Count; 

当给定一个通用数据结构时,JavaScriptSerializer 将数组转换为ArrayLists

【讨论】:

    【解决方案2】:

    这是一个使用 Newtonsoft.Json (Json.NET) 的示例,该示例以 NuGet 包的形式提供。

    用法:

    var jsonString = @"{
        ""data"": [
            {
                Name: ""Mike"", Age: 30
            }, 
            {
                Name: ""John"", Age: 42
            }, 
            {
                Name: ""Tom"", Age: 44
            }
        ]
    }";
    
    var example = JsonConvert.DeserializeObject<Example>(jsonString);
    // example.Data.Length == 3 at this point
    

    class Example
    {
        public Person[] Data { get; set; }
    }
    
    class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    

    【讨论】:

    • 这太棒了,菲尔。谢谢你的例子!
    【解决方案3】:

    您需要首先反序列化您的 json 字符串以获取对象。下面的帖子有几个例子。反序列化后,您应该在 c# 中拥有数据对象的集合(不是字符串)。根据您使用的集合类型,您应该可以从那里调用 collection.Count 或 array.Length。

    C# automatic property deserialization of JSON

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多