使用JSON.NET解析C#中的JSON时,如何从列表中获取属性

本文关键字:JSON 列表 获取 属性 解析 NET 中的 使用 | 更新日期: 2024-09-23 13:01:39

我能够使用以下C#代码使用JSON.NET解析简单属性:

代码C#

    WebClient c = new WebClient();
    var data = c.DownloadString("http://localhost/json1.json");
    JObject o = JObject.Parse(data);
    listBox1.Items.Add(o["name"]);
    listBox1.Items.Add(o["email"][0]);
    listBox1.Items.Add(o["email"][1]);
    listBox1.Items.Add(o["website"]["blog"]);

json1.json

{
    "name": "Fname Lname",
    "email": [
            "email@gmail.com",
            "email@hotmail.com"
    ],
    "website":
    {
            "blog": "example.com"
    }
}

json2.json

{
"name": "Fname Lname",
"email": [
    "email@gmail.com",
    "email@hotmail.com"
],
"website":
{
    "blog": "example.com"
},
"faculty":
{
    "department": [
    {
        "name": "department.name", 
        "location": "department.location"
    }
    ]
}
}


从第二个JSON文件中,我无法从部门获得名称和位置。我如何在C#中做到这一点?

  • 名称:部门名称
  • 位置:department.location

使用JSON.NET解析C#中的JSON时,如何从列表中获取属性

yourjsonobject.faculty.department[0].name;
yourjsonobject.faculty.department[0].location;

这里有一些jsfiddle可以帮助你:

http://jsfiddle.net/sCCrJ/

 var r = JSON.parse('{"name": "Fname Lname","email": [    "email@gmail.com",       "email@hotmail.com"],"website":{    "blog": "example.com"},"faculty":{    "department": [    {        "name": "department.name",         "location": "department.location"    }    ]}}');
alert(r.faculty.department[0].name);
alert(r.faculty.department[0].location);
   for (var i = 0; i < r.faculty.department.length; i++) {
       alert(r.faculty.department[i].name);
   }

您的问题是department是一个对象数组(尽管它恰好只包含一个项),但您没有像现在这样访问它。您可以使用o["faculty"]["department"][0]["name"]来获取数据。

您可能想要使用类(以下是使用http://json2csharp.com/)以便更轻松地处理您的数据。

public class Website
{
    public string blog { get; set; }
}
public class Department
{
    public string name { get; set; }
    public string location { get; set; }
}
public class Faculty
{
    public List<Department> department { get; set; }
}
public class RootObject
{
    public string name { get; set; }
    public List<string> email { get; set; }
    public Website website { get; set; }
    public Faculty faculty { get; set; }
}

然后,您可以使用以下代码获取所有数据(而不是希望固定索引是正确的,并且您没有在属性名称中拼写错误):

WebClient c = new WebClient();
var data = c.DownloadString("http://localhost/json1.json");
var o = JsonConvert.DeserializeObject<RootObject>(data);
listBox1.Items.Add(o.name);
foreach (var emailAddr in o.email)
    listBox1.Items.Add(emailAddr);
listBox1.Items.Add(o.website.blog);
foreach (var dept in o.faculty.department)
{
    listBox1.Items.Add(dept.name);
    listBox1.Items.Add(dept.location);
}