【问题标题】:"NullReferenceException" in Unity3D when trying deserialize data from JSON尝试从 JSON 反序列化数据时 Unity3D 中的“NullReferenceException”
【发布时间】:2019-04-09 17:42:20
【问题描述】:

我需要从 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# 对象。

【问题讨论】:

  • 您的 c# 模型与 JSON 不匹配。 JSON 是一个具有单个属性“问题”的对象,其中包含一系列问题。您正在尝试将其反序列化为包含属性“问题”的对象,该属性包含一系列问题。注意“s”。

标签: c# json parsing unity3d


【解决方案1】:

正如 Amy 在 cmets 中提到的,您的 C# 类结构与您的 JSON 不匹配,我使用 http://json2csharp.com/,因为它准确且快速。确保将 [Serializable] 放在每个类上方,以便我们可以将数据结构或对象状态转换为 Unity 可以存储和稍后重建的格式阅读更多 here。最后,我会避免在这种结构中使用 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;
}

【讨论】:

  • can cause problems .. 它导致问题 ;) 属性永远不会序列化,因此您应该始终使用字段来进行序列化和反序列化的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多