[英]Deserialize JSON with Json.NET in Windows 8 Store App (C#)
我試圖在Windows 8的Visual Studio 2012中使用C#編寫Windows運行時組件,但通過使用Json.NET反序列化JSON這樣,我遇到了一些問題:
{
"header": {
"id": 0,
"code": 0,
"hits": 10
},
"body": {
"datalist": [
{
"name": "",
"city": "",
"age": 0
},
{
"name": "",
"city": "",
"age": 0
},
{
"name": "",
"city": "",
"age": 0
}
]
}
}
我的意圖是從中獲得頂級詞典,並將每個值解釋為字符串。 對於此示例,您將獲得一個包含兩個鍵(標題和正文)以及匹配值作為字符串的字典。 之后,您可以沿着樹走下去。 像這樣的功能
Dictionary<string, string> jsonDict =
JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
會很好,但是這個只接受字符串值。 有人知道如何忽略類型或以其他方式獲取它嗎?
此外,要從正文值“ {“數據列表”:[{“名稱”:“”,....}]}“中取出字典列表。
提前致謝!
如果您在定義類時遇到問題,VS 2012中的一項不錯的功能允許您使用Edit
下的Paste Special
命令生成類來保存JSON / XML數據。 例如,您的JSON創建了此類:
public class Rootobject
{
public Header header { get; set; }
public Body body { get; set; }
}
public class Header
{
public int id { get; set; }
public int code { get; set; }
public int hits { get; set; }
}
public class Body
{
public Datalist[] datalist { get; set; }
}
public class Datalist
{
public string name { get; set; }
public string city { get; set; }
public int age { get; set; }
}
...然后您可以將您的請求反序列化為RootObject
的類型,例如
var obj = JsonConvert.DeserializeObject<RootObject>(json);
我會使用該網站並將其反序列化為
var myObj =JsonConvert.DeserializeObject<RootObject>(json);
public class Header
{
public int id { get; set; }
public int code { get; set; }
public int hits { get; set; }
}
public class Datalist
{
public string name { get; set; }
public string city { get; set; }
public int age { get; set; }
}
public class Body
{
public List<Datalist> datalist { get; set; }
}
public class RootObject
{
public Header header { get; set; }
public Body body { get; set; }
}
您也可以在不聲明任何類的情況下使用dynamic
關鍵字
dynamic myObj =JsonConvert.DeserializeObject(json);
var age = myObj.body.datalist[1].age;
而且由於JObject實現IDictionary <>,所以這也是可能的
var jsonDict = JObject.Parse(json);
var age = jsonDict["body"]["datalist"][1]["age"];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.