【问题标题】:Deseralizing XML into simple .NET class, cannot populate property from root node attribute将 XML 反序列化为简单的 .NET 类,无法从根节点属性填充属性
【发布时间】:2010-02-17 18:29:13
【问题描述】:

我有一个简单的类,我试图从 XML 文档中填充。

XML 文件在根节点中有一个名为 TrackingID 的属性,我想将其作为属性获取。出于某种原因,当我反序列化类时,TrackingID 为空。其他一切都很好。我在 TrackingID 属性上尝试了各种属性,但没有成功。

有什么想法吗?

代码:

Dim faultXML As String = "<?xml version='1.0' encoding='UTF-8' ?>"
faultXML += "<myxmlns:Fault xmlns:myxmlns='http://somename/space' xmlns:myxmlns_base=http://somename/base' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://somename/space 
faultXML += "myxmlns_102809.xsd http://idealliance.org/maildat/Specs/md091/myxmlns70C/base myxmlns_base_102809.xsd' myxmlns:TrackingID='160217057912'>"
faultXML += "<myxmlns:FaultCode>500</myxmlns:FaultCode>"
faultXML += "<myxmlns:FaultDescription>Some Description.</myxmlns:FaultDescription>"
faultXML += "</myxmlns:Fault>"

Dim fault As WebServiceFault
Dim Serializer As New XmlSerializer(GetType(WebServiceFault))
Using sr As New System.IO.StringReader(faultXML)
     fault = DirectCast(Serializer.Deserialize(sr), WebServiceFault)
End Using

类:

Imports System.Xml.Serialization

<System.SerializableAttribute(), _
 System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True, [Namespace]:="http://somename/space"), _
 System.Xml.Serialization.XmlRootAttribute([ElementName]:="Fault", [Namespace]:="http://somename/space", IsNullable:=False)> _
Public Class WebServiceFault

    Private faultCodeField As String
    Private faultDescriptionField As String
    Private trackingIDField As String


    Public Property FaultCode() As String
        Get
            Return Me.faultCodeField
        End Get
        Set(ByVal value As String)
            Me.faultCodeField = value
        End Set
    End Property

    Public Property FaultDescription() As String
        Get
            Return Me.faultDescriptionField
        End Get
        Set(ByVal value As String)
            Me.faultDescriptionField = value
        End Set
    End Property

    Public Property TrackingID() As String
        Get
            Return Me.trackingIDField
        End Get
        Set(ByVal value As String)
            Me.trackingIDField = value
        End Set
    End Property
End Class

【问题讨论】:

    标签: vb.net serialization xml-serialization


    【解决方案1】:

    我找到了答案。添加以下属性解决了我的问题。

     <System.Xml.Serialization.XmlAttributeAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Qualified)> _
        Public Property TrackingID() As String
            Get
                Return Me.trackingIDField
            End Get
            Set(ByVal value As String)
                Me.trackingIDField = value
            End Set
        End Property
    

    【讨论】:

    • 干得好!我没有用命名空间限定我的所有元素和属性,从而使我的测试代码无效(TrackingID 属性是唯一具有命名空间前缀的东西)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多