【问题标题】:Serialize string to JSON without \0027在没有 \0027 的情况下将字符串序列化为 JSON
【发布时间】:2013-04-16 23:07:07
【问题描述】:

一个相当简单的问题。我有以下代码

var json = new JavaScriptSerializer();
var test = json.Serialize("'");

现在,Visual Studio 局部变量 watch 显示 test 包含一个字符串值 "\"\\u0027\""。是否有可能,使用 ASP.NET 中的构建使Serialize(); 返回没有\0027 格式的序列化字符串?

test 的期望结果是 "\"\'\""

谢谢!

【问题讨论】:

  • 反序列化后的输出检查了吗?它会自动解析特殊字符
  • 没问题。 \u0027 等于 '?还有其他问题吗?
  • 调试设置中可能隐藏了一个选项,用于控制多字节字符的显示方式。
  • ' 替换为\u0027 不是问题,或者取决于您如何使用序列化结果。序列化通过Web服务器传输,然后反序列化只是序列化最常见的用途,不是唯一的。

标签: c# asp.net serialization


【解决方案1】:

正如评论者所说,这真的无关紧要,因为\u0027 字面意思是 Javascript 中的单引号。

但是,如果这让您感到困扰,您可能想尝试使用 JSON.NET,它会在编码字符串中保留单引号。

【讨论】:

【解决方案2】:

试试下面的

var json = JsonConvert.SerializeObject(obj);

【讨论】:

  • 欢迎来到 Stack Overflow!请添加一些解释为什么此代码有助于 OP。这将有助于为未来的观众提供一个可以学习的答案。请参阅How to Answer 了解更多信息。
【解决方案3】:

您必须在序列化后使用此表达式替换您的 JSON 字符串。这是我的代码示例以及我在提供 json 输出时使用的函数。

string json = obj.ToJSON();

json = System.Text.RegularExpressions.Regex.Unescape(json);

File.WriteAllText("<DirectoryFile>.json", json);

public static string ToJSON(this object obj)
{
    var serializer = new JavaScriptSerializer();
    serializer.MaxJsonLength = Int32.MaxValue;
    JavaScriptSerializer js = new JavaScriptSerializer();

    return js.Serialize(obj);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2020-05-27
    • 2017-04-01
    • 2015-02-06
    • 1970-01-01
    • 2016-02-04
    相关资源
    最近更新 更多