2015-10-19 105 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

谢谢,完美的工作! –