我有一个带有两个字符串属性的对象。为什么在查看调试中对象的值时,撇号会显示为\u0027
,但是当您查看属性的值时,它会将其显示为撇号?
见下面的截图:
顺便说一下,我通过控制器的动作接收到这个对象,它是否与反序列化对象有关?
编辑: 我刚刚意识到ToString()方法已被覆盖并返回此:
new JavaScriptSerializer().Serialize(this);
那么为什么该方法会将撇号转换为\u0027t
?
答案 0 :(得分:1)
因为它是有效的('
和\u0027
是JavaScript / JSON的相同字符的不同表示形式,并且您不能在带引号的字符串中使用引号。即使可以在JSON字符串“'”和“”中使用相反的引号,也可以放弃JSON序列化的两种类型的引号更安全。
请注意,JSON.Net版本更加智能,无法转义所有引号:
Console.WriteLine(new JavaScriptSerializer().Serialize("a'b")); // "a\u0027b"
Console.WriteLine(JsonConvert.SerializeObject("a'b")); // "a'b"