【问题标题】:JsonConvert.DeserializeObject special characters Unterminated string. Expected delimiter:JsonConvert.DeserializeObject 特殊字符 未终止的字符串。预期的分隔符:
【发布时间】: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.

【问题讨论】:

    标签: c# jquery asp.net-mvc json knockout.js


    【解决方案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 来引起更多的关注这个问题。
    猜你喜欢
    • 2012-12-22
    • 2017-01-19
    • 2010-11-12
    • 2021-07-02
    • 2021-07-23
    • 2019-08-28
    • 2023-03-24
    • 2015-11-22
    • 2022-11-13
    相关资源
    最近更新 更多