knockout.js JsonConvert.DeserializeObject特殊字符未终止的字符串,需要分隔符:

5w9g7ksd  于 2022-11-10  发布在  其他
关注(0)|答案(4)|浏览(203)

由于某种原因,当我在knockout模型中有一个特殊字符并将其转换为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.
qvk1mo1f

qvk1mo1f1#

如果JSON字符串包含特殊字符,如双引号"、反斜杠\或斜杠/,则需要使用反斜杠\对它们进行转义。没有JSON解析器能够处理格式不正确的JSON字符串。
因此,您需要确保您的theModel正确,并且符合JSON.org标准。

8aqjt8rx

8aqjt8rx2#

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

<httpRuntime maxQueryStringLength="2097151" maxUrlLength="2097151" />

<security>
  <requestFiltering>
    <requestLimits maxQueryString="2097151" maxUrl="2097151" />
  </requestFiltering>
</security>

函数的作用是:对URI组件进行编码。
此函数对特殊字符进行编码。此外,它还对以下字符进行编码:,/?:@ & = + $ #
这已经被添加到我 AJAX 请求:

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

46scxncf3#

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

gjmwrych

gjmwrych4#

我遇到了这个问题,我通过使用JavaScript encodeURIComponent()函数对JSON数据进行编码来解决这个问题。

encodeURIComponent(data);

相关问题