2013-12-23 3 views
0

다음 XML을 deserialize하는 데 약간의 문제가 있습니다. 주문을 잘 채울 수는 있지만 중첩 된 패키지는 나에게 힘든 시간을 가져다 준다. 비누 메시지 인 메시지는 일련 화되기 전에 정리됩니다. 문제는 패키지 태그의 XSI 특성과 관련이 있다고 생각합니까?메시지를 deserialize하는 데 문제가 있음

참고 : 다음 XML은 SOAP 메시지에서 가져온 것으로, getSoapBody (string) 함수에서 반환됩니다. 다른 모든 (40 정도) 비누 반응은 괜찮습니다. 그저 이중 중첩 입술로 문제가 있습니다.

 NameSpaceManager.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance") 

     'Initialize our parser context for the xsi namespace 
     Context = New XmlParserContext(Nothing, NameSpaceManager, Nothing, XmlSpace.None) 

     'Set up our reader settings 
     ReaderSettings = New XmlReaderSettings() 
     ReaderSettings.ConformanceLevel = ConformanceLevel.Fragment 

     'getSoapBody(Response) rips out the env stuff and sets up for serialization this works 
     'fine and I can populate all other SOAP messages fine. It just returns elements inside 
     'the SOAP response body 
     Reader = XmlReader.Create(New StringReader(GetSoapBody(Response)), ReaderSettings, Context) 

     If Deserializer.CanDeserialize(Reader) Then 
      'Deserialize here 
      ResponseObject = CType(Deserializer.Deserialize(Reader), U) 
     Else 
      Throw New SerializationException("Unable to deserialize class object") 
     End If 

주문 내 주문 클래스로 잘 채워 다음과 같이 deseiralizes

<?xml version="1.0" encoding="utf-8"?> 
<Orders> 
    <Order> 
    <OrderNumber xsi:type="xsd:int">12345</OrderNumber> 
    <Promotion xsi:type="xsd:string" /> 
    <Agent_Contact xsi:type="xsd:string" /> 
    <Packages> 
     <Package> 
      <OrderPackageType_ID xsi:type="xsd:int">1</OrderPackageType_ID> 
      <Title_ID xsi:type="xsd:int">1</Title_ID> 
      <StartIssue xsi:type="xsd:string">November 2010</StartIssue> 
      <EndIssue xsi:type="xsd:string" /> 
     </Package> 
     <Package> 
      <OrderPackageType_ID xsi:type="xsd:int">2</OrderPackageType_ID> 
      <Title_ID xsi:type="xsd:int">1</Title_ID> 
      <StartIssue xsi:type="xsd:string">October 2010</StartIssue> 
      <EndIssue xsi:type="xsd:string" /> 
     </Package> 
     </Packages>  
    </Order> 
    <Order> .... </Order> 
</Orders> 

코드 패키지는 아무 것도 반환하지입니까?
주문 클래스에서 패키지 목록을 사용하고 있습니다.

''' <remarks/> 
<Serializable()> _ 
<XmlType("Order", AnonymousType:=True, NameSpace:="http://www.w3.org/1999/XMLSchema-instance")> _ 
Public Class Order 
    'other memebers first 
     ..... 
     'nested packed class declaration 
     <XmlElement("Package", NameSpace:="http://www.w3.org/1999/XMLSchema-instance")> _ 
     Public Property Packages() As List(Of Package) 
      Get 
      If _Packages Is Nothing Then 
       _Packages = New List(Of Package) 
      End If 
      Return _Packages 
      End Get 
      Set(ByVal value As List(Of Package)) 
      _Packages = value 
      End Set 
     End Property 
End Class 

내 패키지 클래스는 다음과 같은 방식으로 꾸며져 있습니다.

<Serializable()> _ 
<XmlType("Package", AnonymousType:=True, NameSpace:="http://www.w3.org/1999/XMLSchema-instance"> _ 
Public Class Package 
     <XmlElementAttribute("OrderPackageType_ID", Form:=XmlSchemaForm.Unqualified, IsNullable:=True)> _ 
     Public Property OrderPackageType_ID() As NullableInt 
      Get 
      Return _OrderPackageType_ID 
      End Get 
      Set(ByVal value As NullableInt) 
      _OrderPackageType_ID = value 
      End Set 
     End Property 
     .... 
End Class 

패키지 클래스는 다음 XML로 잘 채 웁니다. 그러나 위와 같이 중첩 된 요소로, 빈을 반환합니까?

<?xml version="1.0" encoding="utf-8"?> 
     <Packages> 
     <Package> 
      <OrderPackageType_ID xsi:type="xsd:int">1</OrderPackageType_ID> 
      <Title_ID xsi:type="xsd:int">1</Title_ID> 
      <StartIssue xsi:type="xsd:string">November 2010</StartIssue> 
      <EndIssue xsi:type="xsd:string" /> 
     </Package> 
     <Package> 
      <OrderPackageType_ID xsi:type="xsd:int">2</OrderPackageType_ID> 
      <Title_ID xsi:type="xsd:int">1</Title_ID> 
      <StartIssue xsi:type="xsd:string">October 2010</StartIssue> 
      <EndIssue xsi:type="xsd:string" /> 
     </Package> 
    </Packages>  

도움이 될만한 정보가 있으면 알려 주시기 바랍니다.

관해서 ...

답변

0

내가 더 나은이 대답, 지금 얼마 전에 답을 발견했다고 생각했다. 다음과 똑같은 속성과 클래스를 꾸밀 필요가있었습니다. 이게 내 문제를 해결했습니다.

<System.Xml.Serialization.XmlArrayAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified)> _ 
<System.Xml.Serialization.XmlArrayItemAttribute("Package", GetType(Package), Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable:=True)> _ 
    Public Property Packages() As Package() 
     Get 
      Return _Packages 
     End Get 
     Set(ByVal value As Package()) 
      _Packages = value 
     End Set 
    End Property 
End Class 


<System.Xml.Serialization.XmlRoot("Package")> _ 
Public Class Package 
.... 
End Class 
관련 문제