Voi*_*ing 3 c# json encode escaping
在我创建了自己的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;
}
Run Code Online (Sandbox Code Playgroud)
替换呼叫:Replace("\"", "\\\"")被替换"用\\",这当然产生无效JSON,因为它看到两个反斜杠(一个作为转义字符,很象上述C#)作为JSON文件中的单个"真正的"反斜线,因此不逸出如预期的那样双引号.Replace("\\", "\\\\")然而,该调用完美地工作(即,它将两个反斜杠替换为两个,如我所料).
根据我的观点,我很容易告诉Replace方法没有执行函数,就像我期望的那样.我的问题是为什么?我知道我不能使用,Replace("\"", "\\"")因为反斜杠也是C#的转义字符,所以它会产生语法错误.使用Replace("\"", "\"")也是愚蠢的,因为它会用双引号替换双引号.
为了更好地理解C#中的替换方法,我很想知道为什么Replace方法的行为与我期望的不同.如何Json.Encode实现这种级别的编码?
您要更换"与\"和然后用两个反斜杠...其中将包括您已经创建反斜线替换任何反斜杠.在纸上一次执行一个操作,您将看到相同的效果.
您需要做的就是反转转义的顺序,以便先转义反斜杠然后引用:
return val.Replace("\r\n", " ")
.Replace("\r", " ")
.Replace("\n", " ")
.Replace("\\", "\\\\")
.Replace("\"", "\\\"");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5427 次 |
| 最近记录: |