2013-05-31 40 views
0

我試圖在Visual Studio 2012爲Windows 8 我有一些問題計劃在C#中的Windows運行時組件使用Json.NET反序列化JSON是這樣的:反序列化JSON與Json.NET在Windows 8 Store應用(C#)

{ 
"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); 

一個功能將是很好的,但是這一次只接受字符串值。 有沒有人知道如何忽略這些類型或以另一種方式獲取它?

而且擺脫身體值「{」數據列表「:[{‘Name’:‘’,...}]}」一詞典的列表。

在此先感謝!

回答

0

我會用this site和反序列化作爲

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"]; 
+0

好吧,我更喜歡動態的方式,因爲我不想提前創建課程。但是,你有沒有可能從中得到一份字典清單?我問,因爲從C#中的WinRT組件交換數據到(在我的情況下)JavaScript中,只有少數類型,如IList/IDictionary等。完整列表如下所示:[鏈接](http:// msdn。 microsoft.com/de-de/library/windows/apps/br230301.aspx#PassingToManaged)和JS我綁定在DataList(WinJS.Binding.List)和數據源連接到我的看法。所以我需要一個字典或JSON。有任何想法嗎? – tvelop

+0

@tvelop JObject已經實現了'IDictionary',所以你可以使用它像一本字典。 'var jsonDict = JObject.Parse(json); var age = jsonDict [「body」] [「datalist」] [1] [「age」];' – I4V

+0

好吧,在C#中,我可以像一個一樣使用它,但是我不能將JObject作爲IDictionary類型傳入我的JS部分。你知道一個解決方案,而不是按元素創建一個IDictionary元素嗎?最後,我想從C#中獲取JSON到我的JavaScript部分。尼斯將是一個字典,在這種情況下,兩個字符串(標題,正文)或另一個想法動態地將JSON映射到鍵上。 – tvelop

0

如果您在定義類時遇到問題,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); 
+0

VAR OBJ = JsonConvert.DeserializeObject (JSON); 什麼是json在這裏? – Mihir