簡體   English   中英

使用JSON.NET解析C#中的JSON時,如何從列表中獲取屬性?

[英]How do I get a property from a list when parsing JSON in C# with JSON.NET?

我可以使用帶有此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

您的問題是, 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);
}
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);
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM