JsonConvert.DeserializeObject特殊字符未终止字符串。 预期分隔符:

出于某种原因,当我在我的淘汰模型中有一个特殊字符并将其转换为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
(modelData); }

我收到一个错误:

 Unterminated string. Expected delimiter: ". Path 'Name', line 1, position 178. 

如果JSON字符串包含特殊字符,如双引号“,反斜杠\或斜杠/,则需要使用反斜杠进行转义。没有JSON解析器能够处理第一个格式不正确的JSON字符串地点。

因此,您需要确保您的theModel格式正确并符合JSON.org标准。

我有几次同样的错误。 我更新了我的web.config更大的最大长度,以确保没有截断。

       

encodeURIComponent()函数对URI组件进行编码。

此function对特殊字符进行编码。 另外,它编码以下字符:,/? :@&= + $#

这已添加到我的ajax请求中:

 $.ajax("URL", { type: "POST", cache: false, data: { a: encodeURIComponent(jsonData), b: userID } }) 

我找到了自己问题的答案:escape(ko.toJSON(theModel))我需要的只是转义函数,它运行得很好。