我正在 Web 服务中使用 ASP.NET 2.0 中的一些 Xml 序列化。问题是我有一个定义如下的元素:
<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable:=True)> _
Public Property COMMENTFIELD() As String
Get
Return CommentField ' This is a string
End Get
Set(ByVal value as String)
CommentField = value
End Set
End Property
在代码的其他地方,我正在构建注释并附加 作为每个“评论”之间的换行符(根据我们提交的网络服务的规则),如下所示:(请记住 是表示字符 10 的有效 XML 实体(我相信是换行符)。
XmlObject.COMMENTFIELD = sComment1 & "
" & sComment2
问题是 .NET 试图帮我们一个忙,并在注释字符串中对 & 进行编码,最终发送目标 Web 服务:

,这显然不是'这不是我们想要的。
这是目前发生的事情:
XmlObject.COMMENTFIELD = sComment1 & "
" & sComment2
输出:
<COMMENTFIELD>comment1 &#xA comment2</COMMENTFIELD>
我需要的输出:
<COMMENTFIELD>comment1 
 comment2</COMMENTFIELD>
问题是:我如何强制 .NET 运行时不尝试在编码数据方面帮我任何忙,我已经知道是 XML 兼容的并且已经转义(顺便说一句 sComment1 和 sComment2已经被逃脱了)。我习惯于处理我的 XML,而不是依赖于碰巧在我背后逃脱我所有数据的魔法!
我需要能够将有效的 XML 传递到 COMMENTFIELD 属性,而无需对我提供的数据进行 .NET 编码(因为它已经是 XML)。我需要知道如何告诉 .NET 它正在接收的数据是 XML 字符串,而不是需要转义的普通字符串。
最佳答案
如果您查看 XML spec在 2.4 节中,您会看到元素文本中的 & 字符总是用于指示转义的内容,因此如果您要发送 & 字符,则需要对其进行转义,例如,as & So .Net 正在转换您提供的文字字符串将其转化为有效的 XML。
如果您真的希望 Web 服务接收文字文本 &,那么 .NET 正在做正确的事情。当 Web 服务处理 XML 时,它会将其转换回您最后提供的相同文字字符串。
另一方面,如果您想向远程 Web 服务发送一个带有换行符的字符串,您应该只构造带有换行符的字符串:
XmlObject.COMMENTFIELD = sComment1 & "\n"& sComment2
.Net 将做正确的事情以确保它在网络上正确传递。
关于asp.net - 如何阻止 .NET 使用 XML.Serialization 对 XML 字符串进行编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/414982/