3

将字符串从 stringbuilder 转换为字符串时出现问题。该问题与此问题相似,但略有不同:

这是我的代码简化:

StringBuilder sb = new StringBuilder();
sb.Append("\"");
sb.Append("Hello World");
sb.Append("\"");

string test = sb.ToString();

现在在调试器中 sb 值为:

"Hello World"

在调试器中,测试字符串值更改为:

\"Hello World\"

当将测试字符串值返回给浏览器时,velue 仍然被转义:

\"Hello World\"

我试过使用字符串替换:

test = test.Replace("\"", "");

不走运,我尝试附加 ASCII 字符而不是 \" 并且我还尝试了不同的附加

sb.Append('"');

所有这些都没有运气。有人可以指出我为什么仍然获得转义字符以及如何摆脱它的正确方向。

感谢并感谢任何意见。

4

4 回答 4

1

好的,似乎在 WCF 中 stringBuilder 会自动添加转义引号。这意味着您无法摆脱这一点。我也做错了。我试图返回一个我应该返回序列化 JSON 对象的字符串。

于 2013-02-19T10:59:58.767 回答
0

我没有看到你描述的行为。用反斜杠转义双引号应该可以。以下代码片段

        var sb = new StringBuilder();
        sb.Append("Ed says, ");
        sb.Append("\"");
        sb.Append("Hello");
        sb.Append("\"");
        Console.WriteLine(sb.ToString());
        foreach (char c in sb.ToString()) Console.Write(c + "-");
        Console.ReadKey();

生产

Ed says, "Hello"
E-d- -s-a-y-s-,- -"-H-e-l-l-o-"-

如果您在字符串的最终显示中获得实际的反斜杠字符,则可能是在 StringBuilder 和 ToString 代码之后添加的。

于 2013-02-11T19:21:50.487 回答
0

您可以在字符串之前使用逐字字符串文字“@”,然后输入两次引号。这消除了在字符串序列中使用转义的使用:)

StringBuilder sb = new StringBuilder();
sb.Append(@"""");
sb.Append("Hello World");
sb.Append(@"""");

string test = sb.ToString();
于 2015-04-04T09:35:19.257 回答
0

在寻找解决方案时,这个问答线程不断出现。对我来说,困惑是调试器转义看起来与稍后我将字符串返回给客户端时应用的 JSON 序列化程序行为完全相同。所以线程顶部的代码(和我的代码)工作正常。

一旦我意识到这一点,我将我正在处理的代码转换为返回一个数组(在本例中为 string[])并存储它而不是原始的字符串对象。随后 JSONResult 序列化程序处理了正确转换数组。

于 2022-02-12T16:37:44.467 回答