特殊字符在XML序列化中的转义
案发现场还原:
很久很久以前,有一个序列化功能:
var Demo1 = new
{
Name = "My Name",
Description = "Description line 1;\nDescription line 2;"
};
Console.WriteLine(new JavaScriptSerializer().Serialize(Demo1));
/*
* 结果显而易见
* {"Name":"My Name","Description":"Description line 1;\nDescription line 2;"}
*/
可是,平静而美好的日子总是过的很快,突然有一天:
产品狗:猿,过来,这里有一个崭新的需求:我们需要把这个描述改成可配置的,因为要随时修改的呀! 程序猿:好吧,看起来应该还算好改,10分钟给你搞定!
<appSettings> <add key="Description" value="Description line 1;\nDescription line 2;"/> </appSettings>
var Demo1 = new { Name = "My Name", Description = ConfigurationManager.AppSettings["Description"] ?? string.Empty }; Console.WriteLine(new JavaScriptSerializer().Serialize(Demo1));
程序猿:改完收工思密达!
谁知,世事总是不如人意(然而测试喵早就看穿了一切)
测试喵:等等走!你这个不行呀,不是该换行的吗,
\\n
又是什么鬼!{"Name":"My Name","Description":"Description line 1;\\nDescription line 2;"}
程序猿定睛一看:哼~我一瞅就知道是转义字符搞的鬼 程序猿:噢,没事,这个好改,2分钟,大师兄给你捉妖~~
一分钟过去了。。。 十分钟过去了。。。 半小时过去了。。。
程序猿(纠结的): WHAT THE F**K!没记错的话,XML跟HTML是使用一样的转义序列的呀,什么
&
呀,<
啊、>
神马的都挺常用的,可是。。。可是。。。换行符什么的,完全没用过啊,HTML里面用的是``````呀。。。
伤不起啊思密达,海螺海螺,快救我!!!
神奇海螺(如同救世主一般的): 我听说转义序列这个东西,除了字符转义序列,貌似还有一种叫做数字转义序列的东西呢。。。
<appSettings> <add key="Description" value="Description line 1;
Description line 2;"/> </appSettings>
Bingo!搞定!神奇海螺万万岁!!!
另:
因为貌似Tab和换行符不能在HTML中使用字符转义序列来转义
因为我没见过Tab和换行符怎样在HTML中使用字符转义序列来转义,
随本案附送Tab和换行符的数字转义序列对应表,以作为大海螺神教入教礼物:
字符名称 | 转义序列 |
---|---|
\t | 	 |
\n | 
 |