Unity中如何将可序列化对象转为无转义的合法JSON字符串?
解决方案
你的问题根源在于对已序列化的JSON字符串进行了二次序列化:你先把单个TouchEvent序列化为字符串,存入List<string>后,又对这个字符串列表做了序列化操作,导致每个JSON字符串被当作普通字符串处理,自动添加了转义引号和外层双引号,最终格式出错。
正确处理方式分两种情况:
情况1:直接生成合法的多对象JSON数组(推荐)
放弃先序列化单个对象的操作,直接将TouchEvent对象存入列表,最后统一序列化整个对象列表:
// 定义存储TouchEvent对象的列表(而非字符串) List<TouchEvent> allTouches = new List<TouchEvent>(); // 添加原始对象 allTouches.Add(newTouch); // 最后统一序列化整个列表,得到合法JSON数组 string validJson = JsonConvert.SerializeObject(allTouches);
这样生成的JSON就是你期望的格式:[{"color": null, "end_pos": null, "end_time":...}],没有多余转义,性能也远高于手动处理字符串。
情况2:必须分批存储序列化后的字符串(特殊场景)
如果因为业务限制必须先存单个对象的JSON字符串,不要对字符串列表做序列化,而是手动拼接成合法的JSON数组:
List<string> allTouches = new List<string>(); // 序列化单个对象并存入列表 string touchJson = JsonConvert.SerializeObject(newTouch); allTouches.Add(touchJson); // 手动拼接成JSON数组 string validJson = "[" + string.Join(",", allTouches) + "]";
这种方式避免了二次序列化,同样能得到合法格式的JSON。
关键说明
你不需要将对象转为字典,也不需要手动修剪/替换字符——问题出在序列化流程的错误嵌套,调整序列化时机即可解决。
内容的提问来源于stack exchange,提问作者cinnamonrollapplecider
相关产品推荐
相关产品推荐

