我有一个类似的问题 - 客户端需要来自 web 服务的 XML,其字符串包含在可怕的 CData 标记中,这完全没有必要,但他们不想重新编码他们的客户端,所以我必须使我的 XML 符合。
我的工作方式是将我想显示为 CDATA 的(字符串)属性重新输入到我自己的自定义类型“XmlCDataString”中。
然后我在该类型上实现了 IXmlSerializable 并在其中加入了几个 Narrowing 和 Widening 转换运算符重载,以便这些属性仍然尽可能像字符串一样工作。
Imports System.Xml.Serialization
Imports System.Xml
<Serializable()> _
Public Class XmlCDataString
Implements IXmlSerializable
Private _strValue As String = Nothing
Public Sub New()
End Sub
Public Sub New(ByVal strValue As String)
_strValue = strValue
End Sub
Public Property StringValue() As String
Get
Return _strValue
End Get
Set(ByVal value As String)
_strValue = value
End Set
End Property
Public Shared Widening Operator CType(ByVal strValue As String) As XmlCDataString
Return New XmlCDataString(strValue)
End Operator
Public Shared Narrowing Operator CType(ByVal cdata As XmlCDataString) As String
Return cdata.StringValue
End Operator
Public Function GetSchema() As System.Xml.Schema.XmlSchema Implements System.Xml.Serialization.IXmlSerializable.GetSchema
Throw New NotImplementedException
End Function
Public Sub ReadXml(ByVal reader As System.Xml.XmlReader) Implements System.Xml.Serialization.IXmlSerializable.ReadXml
' TODO
End Sub
Public Sub WriteXml(ByVal writer As System.Xml.XmlWriter) Implements System.Xml.Serialization.IXmlSerializable.WriteXml
Dim doc As XmlDocument
Dim xmlCData As XmlCDataSection
Dim serializer As XmlSerializer
doc = New XmlDataDocument()
xmlCData = doc.CreateCDataSection(_strValue)
serializer = New XmlSerializer(GetType(XmlCDataSection))
serializer.Serialize(writer, xmlCData)
End Sub
End Class
然后我要序列化为 CData 的属性我必须重新键入如下(使用您的示例):
Private _messageText As XmlCDataString
Public Property MessageText() As XmlCDataString
Get
Return _messageText
End Get
Set(ByVal value As XmlCDataString)
_messageText= value
End Set
End Property
这对我有用!