c# - 尝试从 JSON 反序列化数据时 Unity3D 中的“NullReferenceException”
问题描述
我需要从 json 文件中获取一些数据,我将其保存到名为 dataAsJson 的字符串中,在调试时它看起来像这样:
{\r\n\t\"question\":\r\n\t[\r\n\t\t{\r\n\t\t\"text\":
\"głośniki\",\r\n\t\t\"correct\": \"speaker\",\r\n\t\t\"answer1\":
\"speaker1\",\r\n\t\t\"answer2\": \"speaker2\",\r\n\t\t\"answer3\":
\"speaker3\"\r\n\t\t},\r\n\t\t{\r\n\t\t\"text\":
\"pustynia\",\r\n\t\t\"correct\": \"desert\",\r\n\t\t\"answer1\":
\"desert1\",\r\n\t\t\"answer2\": \"desert2\",\r\n\t\t\"answer3\":
\"deser3\"\r\n\t\t},\r\n\t\t{\r\n\t\t\"text\":
\"rycerz\",\r\n\t\t\"correct\": \"knight\",\r\n\t\t\"answer1\":
\"knight1\",\r\n\t\t\"answer2\": \"knight2\",\r\n\t\t\"answer3\":
\"knight3\"\r\n\t\t}\r\n\t]\r\n}
然后我使用 JsonUtility.FromJson(dataAsjJson) 这是我的对象类:
public class Question
{
public string text { get; set; }
public string correct { get; set; }
public string answer1 { get; set; }
public string answer2 { get; set; }
public string answer3 { get; set; }
}
public class RootObject
{
public List<Question> questions { get; set; }
}
如您所见,json 正文只是带有数组的“问题”。在 Debug.log(dataAsJson) 它看起来正常:
{
"question":
[
{
"text": "głośniki",
"correct": "speaker",
"answer1": "speaker1",
"answer2": "speaker2",
"answer3": "speaker3"
},
{
"text": "pustynia",
"correct": "desert",
"answer1": "desert1",
"answer2": "desert2",
"answer3": "deser3"
},
{
"text": "rycerz",
"correct": "knight",
"answer1": "knight1",
"answer2": "knight2",
"answer3": "knight3"
}
]
}
我需要将其成功转换为 C# 对象。
解决方案
正如 Amy 在评论中提到的,您的 C# 类结构与您的 JSON 不匹配,我使用http://json2csharp.com/因为它准确且快速。确保将 [Serializable] 放在每个类上方,以便我们可以将数据结构或对象状态转换为 Unity 可以存储和稍后重建的格式,请在此处阅读更多内容。最后,我会避免在这个结构中使用 getter 和 setter,这会导致序列化问题,并且统一建议使用字段来代替。
[Serializable]
public class Question
{
public string text;
public string correct;
public string answer1;
public string answer2;
public string answer3;
}
[Serializable]
public class RootObject
{
public List<Question> question;
}
推荐阅读
- excel - Excel:表单控制按钮,每月计数
- c - 如何在 execv() 中使用少量命令
- php - 使用 livewire 仅选中一个复选框并取消选中其他复选框
- dataframe - : 和 ! 之间的区别 在朱莉娅数据框中
- html - 如何将非常具体的图像设置为边框
- dataset - 生菜数据集中氮磷钾缺乏?
- android - react-native-pdf iOS 和 Android 构建错误
- neo4j - 你如何为每个节点属性的每个元素创建节点?
- javascript - 我无法从 JavaScript 中的数组列表(在表单内)检索数据
- html - 提交表单时:没有声明html文档的字符编码(虽然有)