2014-02-27 63 views
2

我期待從我的json字符串中獲取每個「名稱」屬性和「text」屬性,並將它們添加到它們各自的列表中。解析沒有json.net的JSON數組

JSON:

{ 
    "buttons": [ 
    { 
     "name": "btnTest1", 
     "text": "Click Me1!" 
    }, 
    { 
     "name": "btnTest2", 
     "text": "Click Me2!" 
    }, 
    { 
     "name": "btnTest3", 
     "text": "Click Me3!" 
    } 
    ], 
    "width": 400, 
    "height": 300 
} 

當前代碼:

List<string> btnName = new List<string>(); 
List<string> btnText = new List<string>(); 

public class button 
{ 
    public string name { get; set; } 
    public string text { get; set; } 
} 

public class Mod 
{ 
    public List<button> buttons { get; set; } 
    public int width { get; set; } 
    public int height { get; set; } 
} 

var mod = new JavaScriptSerializer().Deserialize<List<Mod>>(json); 

      foreach (Mod m in mod) 
      { 
       foreach (button b in m.buttons) 
       { 
        btnName.Add(b.name); 
        btnText.Add(b.text); 
       } 
      } 

但沒有被填充我的btnName和btnText名單。

我試了一些其他不同的解決方案,沒有運氣。

我在做什麼錯?

(我不想用JSON.net的原因是該應用程序必須在沒有任何DLL是獨立的)

回答

2

根據您的JSON它實際上代表一個單一Mod對象。這就是說,JSON序列應解析/反序列化Mod對象,而不是Mod對象的列表,你應該反映該對象結構的序列化代碼如下...

var mod = new JavaScriptSerializer().Deserialize<Mod>(json); 

foreach (button b in mod.buttons) 
{ 
    btnName.Add(b.name); 
    btnText.Add(b.text); 
} 
1

你反序列化這是一個列表,而你有JSON作爲只有一個對象。 試試這個爲:

var mod = new JavaScriptSerializer().Deserialize<Mod>(json); 
0

更改此

new JavaScriptSerializer().Deserialize<List<Mod>> 

new JavaScriptSerializer().Deserialize<Mod>