2015-10-19 157 views
-1

我試圖反序列化XML字符串轉換爲對象,但它給了我下面的錯誤:反序列化XML數組對象

System.InvalidOperationException:不預期。

XML:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<epp 
    xmlns="urn:ietf:params:xml:ns:epp-1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0  epp-1.0.xsd"> 
    <response> 
     <result code="1000"> 
      <msg>Command completed successfully</msg> 
     </result> 
     <trID> 
      <svTRID>20151019181132-1C16AD22-396-0001</svTRID> 
     </trID> 
    </response> 
</epp> 

類:

Imports System.Xml.Serialization 

<Serializable(), XmlRoot("epp")> 
Public Class EPP 

Public Sub New() 
    Response = New Response() 
End Sub 

<XmlElement(ElementName:="response")> _ 
Public Property Response As Response 
End Class 

<Serializable()> 
Public Class Response 

Public Sub New() 
    result = New result() 
    trID = New trID() 
End Sub 

<XmlElement(ElementName:="result")> _ 
Public Property result As result 

<XmlElement(ElementName:="trID")> _ 
Public Property trID As trID 
End Class 

<Serializable()> 
Public Class trID 

Public Sub New() 
    svTRID = String.Empty 
End Sub 

<XmlElement(ElementName:="svTRID")> _ 
Public Property svTRID As String 
End Class 

<Serializable()> 
Public Class result 

Public Sub New() 
    msg = String.Empty 
End Sub 

<XmlElement(ElementName:="msg")> _ 
Public Property msg As String 
End Class 

下面是代碼:

Dim r As New EPP 
Dim x As New XmlSerializer(r.GetType) 

Using s As New StringReader(response.Xml) 
    r = x.Deserialize(s) 
End Using 

這有什麼錯與「EPP」類?

回答

0

您的XML有一個默認的namespace"urn:ietf:params:xml:ns:epp-1.0"因此您需要指出您的類將被序列化到此名稱空間。最簡單的方法是設置爲<XmlRoot(Namespace := "urn:ietf:params:xml:ns:epp-1.0")>根類,併爲<XmlType(Namespace := "urn:ietf:params:xml:ns:epp-1.0")>將餘下的

<XmlRoot("epp", Namespace := "urn:ietf:params:xml:ns:epp-1.0")> 
Public Class EPP 
    Public Sub New() 
     Response = New Response() 
    End Sub 

    <XmlElement(ElementName:="response")> _ 
    Public Property Response As Response 
End Class 

<XmlType(Namespace := "urn:ietf:params:xml:ns:epp-1.0")> 
Public Class Response 

    Public Sub New() 
     result = New result() 
     trID = New trID() 
    End Sub 

    <XmlElement(ElementName:="result")> _ 
    Public Property result As result 

    <XmlElement(ElementName:="trID")> _ 
    Public Property trID As trID 
End Class 

<XmlType(Namespace := "urn:ietf:params:xml:ns:epp-1.0")> 
Public Class trID 
    Public Sub New() 
     svTRID = String.Empty 
    End Sub 

    <XmlElement(ElementName:="svTRID")> _ 
    Public Property svTRID As String 
End Class 

<XmlType(Namespace := "urn:ietf:params:xml:ns:epp-1.0")> 
Public Class result 

    Public Sub New() 
     msg = String.Empty 
    End Sub 

    <XmlElement(ElementName:="msg")> _ 
    Public Property msg As String 
End Class 

原型fiddle

+0

謝謝,完美的工作! –