asp.net - 如何阻止 .NET 使用 XML.Serialization 对 XML 字符串进行编码

标签 asp.net xml web-services serialization

我正在 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 & "&#xA;" & sComment2

问题是 .NET 试图帮我们一个忙,并在注释字符串中对 & 进行编码,最终发送目标 Web 服务:&#xA;,这显然不是'这不是我们想要的。

这是目前发生的事情:

XmlObject.COMMENTFIELD = sComment1 & "&#xA;" & sComment2

输出:

<COMMENTFIELD>comment1 &amp;#xA comment2</COMMENTFIELD>

我需要的输出:

<COMMENTFIELD>comment1 &#xA; 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/

相关文章:

Spring工具生成Rest Client

java - 在没有 wsimport 的情况下使用 Java 中的通用 xml Soap Web 服务

c# - 设置 'Select' HTML 控件的选定值

c# - 详细信息 GridView 意外刷新整个页面

c# - Entity Framework 4 中无法加载指定的元数据资源错误

xml - Xpath:比较十进制类型的节点属性

java - Axis2 用户认证

asp.net - WCF 位于公共(public)反向代理后面,用于流量加密

xml - 在 SQL Server 中,是否可以将多个插入替换为采用 XML 参数的单个插入?

xml - 通过 XML 中的多个属性查找