簡體   English   中英

在Windows 8 Store App(C#)中使用Json.NET反序列化JSON

[英]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.

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