다음 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>
도움이 될만한 정보가 있으면 알려 주시기 바랍니다.
관해서 ...