我在Web服务中大量使用XML序列化(合同将复杂类型作为params传递)。最近我注意到.Net XML序列化引擎正在逃避一些众所周知的5个保留字符,这些字符必须在包含在元素中时被转义(<,>,&,'和“)。我的第一反应是”好的老.Net,总是在找我“。
然后我开始尝试并注意到它只是逃避<,>和&,并且由于某种原因不是叛逆和双引号。例如,如果我在我的服务中的复杂类型的字段中返回此文字字符串:
Bad:<>&'":Data
这是通过电线传输的(从Fiddler看到):
Bad:<>&'":Data
有没有人遇到这个或理解为什么会这样?串行器是否只是忽略它们或者是否有原因?据我所知,'和'并非在xml元素中有效。
答案 0 :(得分:3)
根据XML spec,常规内容和标记:
&
始终需要以&
转义,因为它是转义字符<
始终需要作为<
进行转义,因为它确定了元素的开头。它甚至必须作为安全性在属性内进行转义,并使编写解析器错误检测更简单。>
不需要转发为>
,但通常是<
'
分隔的属性中,'
才需要以'
转义
只有在"
"
才需要以"
转义
在处理说明,评论和CDATA
部分内部,规则会发生变化,但细节位于规范的2.4 Character Data and Markup部分。
你的序列化程序试图通过保持文件有点人性化来帮助你。
(以上每个也可以使用它们的数字等价物进行转义。)
答案 1 :(得分:0)
XMLSpy说你错了。以下是格式良好的XML:
<root>
<data>'"</data>
</root>
除了“引用XMLSpy的参数”之外,更好的论据是XML Serializer已经超过七年了。在这个时候,我保证有人试图在Name属性中序列化“O'Brien”。这个bug现在已经被注意到了。