2014-01-28 26 views
1

這是我第一次與Json合作。 我已經在我的Visual Studio項目安裝Json.Net和用於反序列化一些簡單的字符串是這樣的:Deserialize Json like {List:{[...],[...]}}

{ 
     "A":"1", 
     "B":"2", 
     "C":"3" 
} 

有了這個代碼:

JToken token = JObject.Parse("{ "A":"1","B":"2","C":"3"}"; 
string aValue = token.SelectToken("A"); 
string aValue = token.SelectToken("B"); 
string aValue = token.SelectToken("C"); 

但我不知道該怎麼用這樣的Json做:

{ 
    "LIST":[ 
      { 
       "A":"value1", 
       "B":"value1", 
       "C":"value1" 
      } 
      { 
       "A":"value2", 
       "B":"value2", 
       "C":"value2" 
      } 
      { 
       "A":"value3", 
       "B":"value3", 
       "C":"value3" 
      } 
    ], 
    "D":"value4", 
    "E":"value5", 
    "F":"value6" 
} 

如何獲得類型的所有元素和像D,E和F這樣的其他變量?

謝謝

+1

首先,您的JSON無效。您在數組中的對象之後缺少逗號。 – valverij

+0

是的,你說得對,數組元素用逗號分隔。 –

回答

5

最簡單的方法是創建對象和反序列化到這些:

public class Parent 
{ 
    public Child[] LIST { get; set; } 
    public string D { get; set; } 
    public string E { get; set; } 
    public string F { get; set; } 
} 

public class Child 
{ 
    public string A { get; set; } 
    public string B { get; set; } 
    public string C { get; set; } 
} 

一旦你定義了自己的類,反序列化的JSON一樣簡單:

var p = JsonConvert.DeserializeObject<Parent>(json); 
+0

此外,我很確定Json.NET只是將它分配給匿名類型,如果您只是使用'JsonConvert.DeserializeObject(string)' – valverij

+0

我按照指示製作但數組Children爲空。像d,e和f這樣的其他變量都可以。 –

+0

@Yiyi在上面的'Parent'類中,將'Children'屬性的名稱更改爲'LIST',或者在'Children'屬性之前添加'[JsonProperty(「LIST」)]''。那麼它應該工作。 –

0

@賈斯汀的回答很好,並且會很好地工作。但是,如果您想繼續使用LINQ-to-JSON API風格,請按照以下方法獲取所有信息:

JToken token = JToken.Parse(jsonString); 

foreach (JToken t in token["LIST"]) 
{ 
    Console.WriteLine(t["A"]); 
    Console.WriteLine(t["B"]); 
    Console.WriteLine(t["C"]); 
} 

Console.WriteLine(token["D"]); 
Console.WriteLine(token["E"]); 
Console.WriteLine(token["F"]);