繁体   English   中英

在没有json.net的情况下解析JSON数组

[英]Parse JSON array without 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)

根据您的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);
}

当您仅将json作为一个对象时,您会将其反序列化为列表。 尝试这样:

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

改变这个

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

new JavaScriptSerializer().Deserialize<Mod>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM