从C#中的JSON字符串中检索对象数

时间:2012-01-05 16:52:09

标签: c# json

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

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

从这个JSON字符串中,我想检索"data"元素中的对象数,在这种情况下,它将是3。

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

我正在使用C#。

3 个答案:

答案 0 :(得分:3)

由于它是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

答案 1 :(得分:1)

以下是使用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; }
}

答案 2 :(得分:0)

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

C# automatic property deserialization of JSON