2014-09-10 39 views
0

我在將SOAP請求反序列化爲對象時遇到困難。從SOAP請求中反序列化XML問題

的XML看起來像這樣(我有過這種控制,所以這可以改變):

<v001:OrderRequest xmlns:v001="http://service.test.com/ServiceMessages/v001"> 
    <v001:TheOrder> 
     ... 
    </v001:TheOrder> 
</v001:OrderRequest> 

這是(的一部分)的對象(我有過這個沒有控制):

... 

<MessageContract(_ 
    WrapperName:="OrderRequest", _ 
    WrapperNamespace:="http://service.test.com/ServiceMessages/v001", _ 
    IsWrapped:=true)> _ 
Public Class OrderRequest 

    <MessageBodyMember(_ 
     [Namespace]:="http://service.test.com/ServiceMessages/v001", _ 
     Order:=0)> _ 
    Public TheOrder As Service.TheOrder 

    Public Sub New() 
     MyBase.New 
    End Sub 

    Public Sub New(theOrder As Service.Order) 
     MyBase.New 
     Me.TheOrder = theOrder 
    End Sub 
End Class 

... 

這是我用反序列化代碼:

... 

Dim xmlString = requestEnvelope.Body.InnerXml 
Dim orderRequest As Service.OrderRequest = Nothing 

Using xmlTextReader = New XmlTextReader(New MemoryStream(xmlString)) 
    Dim xmlSerializer = New XmlSerializer(GetType(Service.OrderRequest), New XmlRootAttribute("OrderRequest")) 

    orderRequest = CType(xmlSerializer.Deserialize(xmlTextReader), Service.OrderRequest) 
End Using 

... 

但我不斷收到以下錯誤:

There is an error in XML document (1, 2). 
<OrderRequest xmlns='http://service.test.com/ServiceMessages/v001'> was not expected. 

我試圖剝離的命名空間,前綴,省略XmlRootAttribute參數XmlSerializer的,...產生不同的錯誤消息或空物體...... 有什麼我失蹤或者做錯了什麼?我一直在盯着這個近2天,我擔心我只是忽略了一些東西。

回答

1

提供了命名空間XmlSerializer的的XmlRootAttribute做了工作:

Dim xmlSerializer = New XmlSerializer(_ 
    GetType(Service.OrderRequest), _ 
    New XmlRootAttribute("OrderRequest") _ 
     With {.Namespace = "http://service.test.com/ServiceMessages/v001"}) 
+0

一個良好的睡眠是我所需要的... – 2014-09-11 09:31:08