我希望从我的json字符串中获取每个“name”属性和“text”属性,并将它们添加到各自的列表中。
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)
答案 0 :(得分: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 :(得分:1)
当您将json作为一个对象时,您将其反序列化为List。 试试这个:
var mod = new JavaScriptSerializer().Deserialize<Mod>(json);
答案 2 :(得分:0)
更改此
new JavaScriptSerializer().Deserialize<List<Mod>>
到
new JavaScriptSerializer().Deserialize<Mod>