You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:01:05