Unity中JsonUtility将List转为JSON返回空对象{}的问题
解决Unity中JsonUtility序列化List返回空JSON的问题
问题原因
Unity内置的JsonUtility.ToJson不支持直接序列化List<T>或数组,必须将集合类型包裹在一个带有[System.Serializable]标记的类/结构体中才能正确序列化。你直接传入List<QuizList>,所以返回空对象{}。
解决方案
步骤1:添加列表包装类
创建一个可序列化的类,用来包裹你的QuizList列表:
[System.Serializable] public class QuizListWrapper { public List<QuizList> quizList; }
步骤2:修改序列化代码
在datatest.cs中,用这个包装类封装quiz_list后再序列化:
void Awake() { choices.Add("Aaa"); choices.Add("Bbb"); choices.Add("Ccc"); question_list.Add(new QuestionList( "I'm Gonna Be (500 Miles)", choices, 1 )); quiz_list.Add(new QuizList( "sadasdasd", question_list )); // 用包装类包裹列表后序列化 var wrapper = new QuizListWrapper(); wrapper.quizList = quiz_list; var json = JsonUtility.ToJson(wrapper); Debug.Log(json); // 现在会输出正确的JSON内容 }
额外注意事项
- 确保所有需要序列化的类都带有
[System.Serializable]标记(你的代码已满足) - 若需要更灵活的序列化支持(比如直接处理List、字典),可在Package Manager中导入Unity官方的
Newtonsoft Json包,但上述方案是内置工具的标准解决方式。
验证结果
修改后,Debug.Log会输出包含完整数据的JSON,示例如下:
{"quizList":[{"quizName":"sadasdasd","questionList":[{"question":"I'm Gonna Be (500 Miles)","choice":["Aaa","Bbb","Ccc"],"option":1}]}]}
内容的提问来源于stack exchange,提问作者LearnProgramming
相关产品推荐
相关产品推荐

