2015-10-19 3 views
-1

Я пытаюсь десериализации XML-строку в объект, но он дает мне следующую ошибку:Deserialize 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

Спасибо, что сработало отлично! –

Смежные вопросы