【问题标题】:How to stop .NET from encoding an XML string with XML.Serialization如何阻止 .NET 使用 XML.Serialization 对 XML 字符串进行编码
【发布时间】:2009-01-06 00:01:23
【问题描述】:

我正在 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 服务:&amp;amp;#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 字符串,而不是需要转义的普通字符串。

【问题讨论】:

  • 你是说远程 Web 服务区分 和嵌入的换行符?如果是这样,我认为它没有正确处理 XML。

标签: asp.net xml web-services serialization


【解决方案1】:

如果您查看XML spec 2.4 节,您会看到元素文本中的 & 字符总是用于表示转义的内容,因此如果您想发送 & 字符,则需要对其进行转义,例如,如& 所以 .Net 正在将您提供的文字字符串转换为有效的 XML。

如果您真的希望 Web 服务接收文字文本 &,那么 .NET 正在做正确的事情。当 Web 服务处理 XML 时,它会将其转换回您最终提供的相同文字字符串。

另一方面,如果你想向远程 Web 服务发送一个带有换行符的字符串,你应该只用换行符构造字符串:

XmlObject.COMMENTFIELD = sComment1 & "\n" & sComment2

.Net 会做正确的事情来确保它在网络上正确传递。

【讨论】:

  • 我已经尝试在 cmets 之间添加 Environment.NewLine 以及在 cmets 之间添加 Chr(10)。另一边出现的所有内容都是正常的换行符(我需要 XML 实体),这是因为 \n, Chr(10) 都是不需要转义的有效 XML 值。
【解决方案2】:

在同一个字符串中混合两种不同的编码约定可能很危险。由于您有自己的约定,我建议在准备发送时显式编码整个字符串并在接收端显式解码。

尝试HttpServerUtility.HtmlEncode 方法(System.Web)。

+汤姆

【讨论】:

    猜你喜欢
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2012-02-16
    • 2013-11-26
    • 1970-01-01
    相关资源
    最近更新 更多