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

C# 在用JSON.NET解析C中的JSON时,如何从列表中获取属性?,c#,json,parsing,C#,Json,Parsing,我能够使用JSON.NET和以下C代码解析简单属性: 代码C json1.json json2.json 从第二个JSON文件中,我无法从部门获取名称和位置。在C语言中我该怎么做 姓名:department.name 地点:department.location 您的问题是department是一个对象数组,尽管它碰巧只包含一个项,但您并没有像现在这样访问它。您可以使用o[faculty][department][0][name]获取您的数据 public class Website {

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

代码C

json1.json

json2.json

从第二个JSON文件中,我无法从部门获取名称和位置。在C语言中我该怎么做

姓名:department.name 地点:department.location 您的问题是department是一个对象数组,尽管它碰巧只包含一个项,但您并没有像现在这样访问它。您可以使用o[faculty][department][0][name]获取您的数据

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; }
}
您可能希望在这里使用自动转换的类,以便更轻松地处理数据

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);
}
这里有一些JSFIDLE可以帮助您做到这一点:


你试过o['faculty']['department'][0]['name']吗?你可能可以使用来了解你的非物质化对象的字段包含什么:D非常感谢@George Stocker OP在C中要求它;不是JavaScript。是的,我认为使用JSFIDLE代码片段更容易理解核心概念。也许,我想这会教他如何钓鱼。
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);
}
yourjsonobject.faculty.department[0].name;
yourjsonobject.faculty.department[0].location;
 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);
   }