c#获取具有指定名称的数组的所有子节点

时间:2017-09-28 12:01:56

标签: c# arrays json serialization deserialization

我的问题很清楚。我想在这个json数组中获取指定的项目(只有name' name'的值);

https://i.hizliresim.com/o6Z0Wb.png<示例('结果'部分应该在前一个圆圈中。);

{"success":true,"message":"","result":[
{"name":"VALUE_I_WANT_TO_GET1","Created":"2017-06-06T01:22:35.727"},  
{"name":"VALUE_I_WANT_TO_GET2","Created":"2017-06-06T01:22:35.727"},  
{"name":"VALUE_I_WANT_TO_GET3","Created":"2017-06-06T01:22:35.727"},  
{"name":"VALUE_I_WANT_TO_GET4","Created":"2017-06-06T01:22:35.727"}
]}  

正如你所看到的......这是一个明确的问题。我的代码是(我认为它应该是这样的);

        var json = wc.DownloadString("website/url");
        JObject data = JObject.Parse(json);
        var test = (string)data["result"][/*I want to get all values with name 'name'*/]["name"];

我使用此代码完成了,您可以使用它:)

        JObject data = JObject.Parse(json);

        for (int i = 0; i <= data["result"].Count()-1; i++)
        {
            var test = (string)data["result"][i]["name"];
            listBox1.Items.Add(test);
        }

3 个答案:

答案 0 :(得分:0)

以下是一些代码:

void Main()
{
    // create array
    DataFromJSON[] data = new UserQuery.DataFromJSON[3];
    data[0] = new DataFromJSON() { Data = "val0", Created = DateTime.Now };
    data[1] = new DataFromJSON() { Data = "val1", Created = DateTime.Now };
    data[2] = new DataFromJSON() { Data = "val2", Created = DateTime.Now };

    var values = from x in data
                 select x.Data;

    values.Dump();

}

// Define other methods and classes here
public class DataFromJSON
{
    public string Data { get; set; }
    public DateTime Created { get; set;}
}

这里#s是使用LinqPad的结果图片。行values.Dump()调用LinqPad定义的扩展方法,将其附加的对象输出到代码windor下面的“Results”窗口。

LinqPad5 resuts

答案 1 :(得分:0)

首先,您必须将json反序列化为您的类型:

MyType results = JsonConvert.DeserializeObject<MyType>(json_array);

其中MyType是这样的:

class MyType
{
    public bool success { get; set; }
    public string message { get; set; }
    public List<AnotherType> results { get; set; }
}

class AnotherType
{
    public string data { get; set; }
    public DateTime Created { get; set; }
}

现在从中获取前227个元素并选择其data

var data = myInstance.results.Take(227).Select(x => x.data);

答案 2 :(得分:0)

Visual Studio可以为您做一个巧妙的技巧。首先,复制您希望查询的json样本,打开一个新的C#文件,然后选择Edit - &gt; Paste Special - &gt; Paste JSON as classes
BOOM!以下是您需要的课程,您应该给他们有意义的名字。

接下来,您可以像这样对Json进行手工化:

var myInstance = JsonConvert.DeserializeJson<MyClass>(jsonString);

这将为您提供根对象的实例,数据保存在其中的数组中。

编辑:

要选择值,您可以执行以下操作(在反序列化上面一行中的数据之后):

myInstance.Array.Select(x => x.name).ToList();

这将给出一个列表,其中只包含所有entires的name属性中的字符串。