2014-02-27 2 views
2

json 문자열에서 각 "name"속성과 "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있는 동안 당신은 목록으로 이것을 역 직렬화하는

답변

2

: 으로 이것을보십시오. 다음과 같이 그 말했다 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.net를 사용하지 않는 이유는이 응용 프로그램은 어떤 DLL이없이 독립 할 수 있어야합니다). 당신의 JSON에 실제로 하나 개의 Mod 객체를 나타내는 따르면

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

변경 ... 당신의 직렬화 코드에서 해당 개체의 구조를 반영해야이

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

new JavaScriptSerializer().Deserialize<Mod> 
관련 문제