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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:14:52