Unity3D中Newtonsoft Json.NET读取字符串值触发异常问题
Unity中Newtonsoft Json.NET TryGetValue字符串读取异常解决方案
问题本质
你触发的Unity.Plastic.Newtonsoft.Json.JsonReaderException,核心原因是远程获取的字符串未被处理成合法的JSON格式值:
- 本地用
SetValue添加字符串时,Json.NET会自动将其包装为合法的JSON字符串(添加外层引号、转义内部特殊字符),所以后续TryGetValue<T>能正常解析。 - 远程返回的纯文本字符串(不带外层引号)直接存入
m_jsonObject后,TryGetValue<T>会尝试将其作为JSON解析,但纯文本本身不是有效的JSON值,因此报错。
解决方法
1. 存入前将远程字符串转为JSON兼容格式
如果远程返回的是纯文本,存入m_jsonObject前用JsonConvert.ToString()或JValue.CreateString()处理,确保生成合法的JSON字符串值:
// 示例:处理远程返回的纯文本字符串 string remoteRawText = "从远程接口获取的纯文本内容"; // 方式1:用JsonConvert转为JSON安全字符串 string jsonSafeString = JsonConvert.ToString(remoteRawText); m_jsonObject.SetValue("targetKey", jsonSafeString); // 方式2:用JValue直接创建字符串类型的JSON节点 m_jsonObject["targetKey"] = JValue.CreateString(remoteRawText);
2. 读取时跳过自动反序列化,直接取原始值
如果无法修改存入逻辑,读取时直接获取JToken的原始字符串值,避免触发JSON解析:
JToken targetToken; if (m_jsonObject.TryGetValue("targetKey", out targetToken)) { // 直接获取字符串值 string result = targetToken.Value<string>(); // 或者用ToString(),效果一致 string result = targetToken.ToString(); }
3. 检查远程接口返回格式
如果远程接口应该返回JSON格式数据,确认接口是否返回了带外层引号的字符串(比如"远程返回的内容"),而非纯文本。若接口返回错误,联系后端修正返回格式。
内容的提问来源于stack exchange,提问作者Everts
相关产品推荐
相关产品推荐

