【问题标题】:Parsing array in JSON string using MiniJSON使用 MiniJSON 解析 JSON 字符串中的数组
【发布时间】:2019-02-14 16:32:46
【问题描述】:

我有这个 JSON 字符串:

{"person":[{"age":"0","name":"John"}]}

“person”是一个列表,可以包含比 John 更多的人。

使用MiniJSON,如何读取“person”中的所有人?

我正在尝试什么:

Dictionary<string, object> dict = MiniJSON.Json.Deserialize(jsonString) as Dictionary<string, object>;
List<object> list = (List<object>)(dict["person"]);
Dictionary<string, string> character = list[0] as Dictionary<string, string>;
print(character["name"]);

但它说 character["name"] 是一个空引用。

【问题讨论】:

  • 我的猜测是那个字符被转换为字典;正在合并为空。尝试 Dictionary character = list[0] as Dictionary;而是。
  • 作为魅力,@MichaelG!随意使用它作为答案。虽然奇怪的是,当我打印 (string) character["name"] 时它作为 Dictionary 工作
  • Dictionary&lt;string,string&gt;不是Dictionary&lt;string,object&gt;。将一个转换为另一个将失败。这意味着list[0] as Dictionary&lt;string, string&gt; 将返回一个null
  • @Daniel 你为什么首先指定object?为什么不明确指定类型?你不需要投射。
  • 目前还不知道使用dynamic,在我正在使用的C#版本上也不允许使用,但是我只是在互联网上学习教程时出现此错误。

标签: c# json unity3d


【解决方案1】:

反序列化这个 JSON 会返回类似这样的结构(通过 quicktype 生成):

public class Person
{
    public List<PersonElement> PersonList { get; set; }
}

public class PersonElement
{
    public long Age { get; set; }
    public string Name { get; set; }
}

我认为您不能将其转换为Dictionary&lt;string,object&gt;,因此是空指针。尝试添加断点并查看反序列化的结果,看看是否可以强制转换它,或者是否需要迭代结果以将其输入字典(如果你想使用字典)。

【讨论】:

  • 事实上我可以,主要问题是我试图直接解析到 Dictionary 而不是 Dictionary
  • @Daniel 这就是你得到空值的原因。那个演员会失败。类型参数之间的继承关系不会转化为字典之间的继承关系
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
相关资源
最近更新 更多