Unity C#读取JSON文件对象字符串返回空值问题求助
解决Unity中JsonUtility读取自定义类返回空字符串的问题
核心原因是Unity内置的JsonUtility不支持序列化自动属性(带{get; set;}的属性),它只能序列化公共字段,或者标记了[SerializeField]的私有字段。你的DialogueContent类使用了自动属性,导致JsonUtility无法正确解析JSON数据并赋值,最终返回空字符串。
修改方案
将DialogueContent类的自动属性改为公共字段即可:
[System.Serializable] public class DialogueContent { public string content; public string letterDelay; public string fontColour; }
进阶封装(可选)
如果需要保留属性的封装逻辑,也可以用私有字段+属性的方式,给字段标记[SerializeField]让JsonUtility能识别:
[System.Serializable] public class DialogueContent { [SerializeField] private string _content; [SerializeField] private string _letterDelay; [SerializeField] private string _fontColour; // 只读属性,外部只能访问不能修改 public string content => _content; public string letterDelay => _letterDelay; public string fontColour => _fontColour; }
验证步骤
- 替换原
DialogueContent类代码 - 重新运行Unity场景,
Debug.Log(dialogueData.dialogue.fireDialogue[0].content)会正确输出Hello there
额外注意
- 确保JSON中的键名和类的字段名完全大小写一致,你的JSON结构和字段名匹配,无需调整
- 所有参与序列化的类必须标记
[System.Serializable],你的代码已经满足这一点
内容的提问来源于stack exchange,提问作者painfullyLost
相关产品推荐
相关产品推荐

