在我创建了自己的 json 编码器之后,我意识到它用两个转义的反斜杠代替了双引号,而不是一个。
我现在意识到 C# 有一个内置Json.Encode()
方法,是的,我已经让它工作了,但是,我对为什么下面的代码(我构建的 json 编码器)没有像我一样替换引号感到困惑预计。
这是我的 json 编码器方法:
public static string jsonEncode(string val)
{
val = val.Replace("\r\n", " ")
.Replace("\r", " ")
.Replace("\n", " ")
.Replace("\"", "\\\"")
.Replace("\\", "\\\\");
return val;
}
replace 调用:Replace("\"", "\\\"")
替换"
为\\"
,这当然会产生无效的 json,因为它将两个反斜杠(一个作为转义字符,很像上面的 C#)视为 json 文件中的单个“真实”反斜杠,因此不会转义双引号,如预期的那样。然而,该Replace("\\", "\\\\")
调用完美地工作(即,它用两个反斜杠替换了一个反斜杠,正如我所期望的那样)。
根据我的论点,我很容易说出 Replace 方法没有执行功能,正如我所期望的那样。我的问题是为什么?我知道我不能使用Replace("\"", "\\"")
反斜杠,因为它也是 C# 的转义字符,所以它会产生语法错误。使用Replace("\"", "\"")
也很愚蠢,因为它会用双引号代替双引号。
为了更好地理解 C# 中的 replace 方法,我很想知道为什么 Replace 方法的行为与我预期的不同。如何Json.Encode
达到这种编码水平?