【问题标题】:escaping string for json result in asp.net server side operationjson 的转义字符串导致 asp.net 服务器端操作
【发布时间】:2011-04-25 13:59:47
【问题描述】:

我有一个服务器端操作手动生成一些 json 响应。 json 中有一个包含字符串值的属性。

转义此 json 结果中包含的字符串值的最简单方法是什么?

所以这个

string result = "{ \"propName\" : '" + (" *** \\\"Hello World!\\\" ***") + "' }";

会变成

string result = "{ \"propName\" : '" + SomeJsonConverter.EscapeString(" *** \\\"Hello World!\\\" ***") + "' }";

并生成以下 json

{ \"propName\" : '*** \"Hello World!\" ***' }

【问题讨论】:

    标签: asp.net string json serverside-javascript jsonserializer


    【解决方案1】:

    首先,我发现手动实现序列化的想法并不好。您应该仅出于学习目的执行此操作,或者您有其他非常重要的原因不能使用标准 .NET 类(例如必须使用 .NET 1.0-3.0 而不是更高版本)。

    现在回到您的代码。您当前生成的结果不是 JSON 格式。您应该将属性名称和属性值放在双倍配额中:

    { "propName" : "*** \"Hello World!\" ***" }
    

    您如何阅读http://www.json.org/ 的双重配额,不仅是必须转义的字符。反斜杠字符也必须被转义。您可以在http://www.jsonlint.com/ 上验证您的 JSON 结果。

    如果你也手动实现反序列化,你应该知道还有更多可以转义为\"\\的字符:\/、\b、\f、\n , \r, \t 和 \u 后跟 4 个十六进制数字。

    我在回答开头的写法是,最好使用标准的 .NET 类,例如 DataContractJsonSerializerJavaScriptSerializer。如果您必须使用 .NET 2.0 而不是更高版本,您可以使用Json.NET

    【讨论】:

    • 感谢您的回复。我可能只需要使用内置的序列化。最初不这样做的原因是要实现的额外代码量,当时看起来有点矫枉过正。字符串连接(在这种情况下)是最初做的最简单和摩擦最小的事情。注意:我根据您对属性名称的反馈编辑了问题(好点)
    • 在您的回答中,指向 JavaScriptSerializer 的链接不起作用
    • @Jason Jarrett:谢谢,链接已修复。
    【解决方案2】:

    你可以试试这样的:

    string.replace(/(\\|")/g, "\\$1").replace("\n", "\\n").replace("\r", "\\r");
    

    【讨论】:

      猜你喜欢
      • 2021-07-21
      • 2012-09-18
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2011-10-05
      • 1970-01-01
      相关资源
      最近更新 更多