gpt4 book ai didi

C#、Unity3D、JSON解析: Failing to parse JSON into C# object

转载 作者:行者123 更新时间:2023-11-30 20:29:15 25 4
gpt4 key购买 nike

我一直在使用 unity 引擎构建英语游戏。我正在努力让 C# 解析 JSON。

过去几天我一直在尝试让 JSON 解析,但没有成功。我已经验证了 JSON,可以将 jsonString 调试到控制台,但是只要 jsonUtility 开始处理 json,我就会加载 NULL 数据。

这是我的 json:

 {"question": {"questionType": "0", "categoryID": "0", "bonusBool": "FALSE", "answerText": "cake", "questionText": "If something is really easy to do, it\u2019s a piece of \u2026\u2026\u2026 \\n a. pie \\n b. tart \\n c. cake", "ID": "0"}}

这是我的 C#:

 [System.Serializable]
public class QuestionDataAsString
{

public string questionText;
public string answerText;
public string categoryID;
public string ID;
public string questionType;
public string bonusBool;

}

[System.Serializable]
public class Question{

public string questionText;
public string answerText;
public int categoryID;
public int ID;
public int questionType;
public bool bonusBool;

}

public static void LoadQuestion()
{
string filePath = Path.Combine(Application.streamingAssetsPath, "questionData.json");
string dataAsJSON = File.ReadAllText(filePath);
Debug.Log(dataAsJSON);
QuestionDataAsString question = JsonUtility.FromJson<QuestionDataAsString>(dataAsJSON);
Debug.Log(question.questionText);
}

public static Question ConvertQuestionDataFromString(QuestionDataAsString stringData)
{
Question question = new Question();
question.questionText = stringData.questionText;
question.answerText = stringData.answerText;
question.categoryID = int.Parse(stringData.categoryID);
question.ID = int.Parse(stringData.ID);
question.questionType = int.Parse(stringData.questionType);
question.bonusBool = Boolean.Parse(stringData.bonusBool);
return question;
}

当我通过闪屏 Controller 运行 LoadQuestion 时,我可以将 json 作为字符串记录到控制台。但是一旦我使用 jsonUtility,我就会得到 Null 对象。

这是控制台输出:

 {"question": {"questionType": "0", "categoryID": "0", "bonusBool": "FALSE", "answerText": "cake", "questionText": "If something is really easy to do, it\u2019s a piece of \u2026\u2026\u2026 \\n a. pie \\n b. tart \\n c. cake", "ID": "0"}}
UnityEngine.Debug:Log(Object)
SaveLoadManager:LoadQuestion() (at Assets/Scripts/SaveLoadManager.cs:91)
<Start>c__Iterator0:MoveNext() (at Assets/Scripts/SplashController.cs:18)
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

Null
UnityEngine.Debug:Log(Object)
SaveLoadManager:LoadQuestion() (at Assets/Scripts/SaveLoadManager.cs:93)
<Start>c__Iterator0:MoveNext() (at Assets/Scripts/SplashController.cs:18)
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

我搜索了这里的答案和统一答案,但没有找到任何相关的解决方案。

知道为什么 fromJson 对所有内容都返回 Null 吗?

最佳答案

您的 JSON 与您的 C# 类结构不匹配。您需要一个根级对象来保存问题的详细信息。此外,您应该使用属性,而不是字段。例如:

public class QuestionRoot
{
public Question Question { get; set; }
}

public class Question
{
public string questionType { get; set; }
public string categoryID { get; set; }
public string bonusBool { get; set; }
public string answerText { get; set; }
public string questionText { get; set; }
public string ID { get; set; }
}

现在你可以这样做了:

var questionRoot = JsonUtility.FromJson<QuestionRoot>(dataAsJSON);
var questionText = questionRoot.question.questionText;

旁注:您应该考虑遵循 C# 的命名惯例。属性几乎总是以大写字母开头:

public string QuestionText { get; set; }

关于C#、Unity3D、JSON解析: Failing to parse JSON into C# object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46408545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com