使用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
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);
}