JsonConvert.DeserializeObject 特殊字符 未终止的字符串。预期的分隔符:
Posted
技术标签:
【中文标题】JsonConvert.DeserializeObject 特殊字符 未终止的字符串。预期的分隔符:【英文标题】:JsonConvert.DeserializeObject special characters Unterminated string. Expected delimiter: 【发布时间】:2014-03-01 04:26:08 【问题描述】:由于某种原因,当我的淘汰模型中有一个特殊字符并将其转换为 json 对象时,字符串在该特殊字符的位置结束,反序列化时出现错误:
$.ajax(
url: "/Admin/Forms/Convert",
type: "post",
//contentType: "application/json",
dataType: "text",
data: "modelData=" + ko.toJSON(theModel),
success: function (data)
// window.open("/Admin/Forms/DisplayClient");
var win = getFullWindow('/Admin/Forms/DisplayClient');
win.open();
,
error: function (xhr, status, msg) alert(msg);
);
当我使用这个方法时:
public void Convert(string modelData)
Form form = JsonConvert.DeserializeObject<Form>(modelData);
我收到一个错误:
Unterminated string. Expected delimiter: ". Path 'Name', line 1, position 178.
【问题讨论】:
【参考方案1】:如果 JSON 字符串包含特殊字符,如双引号 "
、反斜杠 \
或斜杠 /
,则需要使用反斜杠 \
对其进行转义。没有 JSON 解析器能够处理一开始就没有正确格式化的 JSON 字符串。
因此,您需要确保您的 theModel
格式正确并符合 JSON.org 标准。
【讨论】:
你能举个例子吗? 我找到了我自己问题的答案:escape(ko.toJSON(theModel)) 我所需要的只是转义函数,而且效果很好。【参考方案2】:我有几次同样的错误。我已经用更大的最大长度更新了我的 web.config,以确保不会截断。
<httpRuntime maxQueryStringLength="2097151" maxUrlLength="2097151" />
<security>
<requestFiltering>
<requestLimits maxQueryString="2097151" maxUrl="2097151" />
</requestFiltering>
</security>
encodeURIComponent() 函数对 URI 组件进行编码。
此函数对特殊字符进行编码。此外,它还对以下字符进行编码: , / ? : @ & = + $ #
这现已添加到我的 ajax 请求中:
$.ajax("URL",
type: "POST",
cache: false,
data: a: encodeURIComponent(jsonData), b: userID
)
【讨论】:
我有同样的问题,我发现问题是因为特殊字符@。 encodeURIComponent() 函数成功了。【参考方案3】:我找到了我自己问题的答案:escape(ko.toJSON(theModel)) 我所需要的只是转义函数,它工作得很好。
【讨论】:
??,C# 不知道什么是“转义” 这是一个已被弃用的 javascript 函数 (v1.5),请参阅我对当前答案的回答。这个的 c# 版本是 Uri.UnescapeDataString()【参考方案4】:我遇到了这个问题,我通过使用 JavaScript encodeURIComponent()
函数对 JSON 数据进行编码来解决它。
encodeURIComponent(data);
【讨论】:
这并不能真正回答问题。如果您有其他问题,可以点击 提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起更多的关注这个问题。以上是关于JsonConvert.DeserializeObject 特殊字符 未终止的字符串。预期的分隔符:的主要内容,如果未能解决你的问题,请参考以下文章