2015-03-25 69 views
0

我收到了來自java web服務的以下響應。當試圖將其使用DataContractSerializer的反序列化,我收到以下錯誤如何反序列化C#中的以下XML響應:

<ns:redeemVoucherResponse xmlns:ns="http://vouchers.example.com"> 
    <ns:return xmlns:ax236="http://util.vouchers.example.com/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax236:RedeemStatus"> 
     <ax236:status>fail</ax236:status> 
     <ax236:statusCode>4</ax236:statusCode> 
     <ax236:statusMessage>Error message</ax236:statusMessage> 
     <ax236:redeemData xsi:nil="true" /> 
    </ns:return> 
</ns:redeemVoucherResponse> 


Error in line 1 position 65. Expecting element VoucherService.redeemVoucherResponse' from namespace 'http://schemas.datacontract.org/2004/07/Service.Internal.VoucherServices'.. Encountered 'Element' with name 'redeemVoucherResponse', namespace 'http://vouchers.example.com'. 

類使用的反序列化:

public class redeemVoucherResponse { 
     [DataMember] 
     public RedeemStatus @return { get; set; } 
    } 

    public class RedeemStatus { 
     [DataMember] 
     public string status { get; set; } 

     [DataMember] 
     public byte statusCode { get; set; } 

     [DataMember] 
     public string statusMessage { get; set; } 

     [DataMember] 
     public object redeemData { get; set; } 
    } 

代碼中使用的反序列化:

HttpWebResponse objWebResponse = HttpWebResponse)objWebRequest.GetResponse(); 
Stream objResponseStream = objWebResponse.GetResponseStream(); 

Type objType = typeof(redeemVoucherResponse); 
DataContractSerializer objXmlSerializer = new DataContractSerializer(objType); 

redeemVoucherResponse objMessage = (redeemVoucherResponse)objXmlSerializer.ReadObject(objResponseStream); 

回答

0

試試這個..雖然沒有測試過。

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://vouchers.example.com")] 
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://vouchers.example.com", IsNullable = false)] 
public class redeemVoucherResponse 
{ 
    public redeemVoucherResponseReturn @return { get; set; } 
} 

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://vouchers.example.com")] 
public class redeemVoucherResponseReturn 
{ 
    [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://util.vouchers.example.com/xsd")] 
    public string status { get; set; } 

    [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://util.vouchers.example.com/xsd")] 
    public byte statusCode { get; set; } 

    [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://util.vouchers.example.com/xsd")] 
    public string statusMessage { get; set; } 

    [System.Xml.Serialization.XmlElementAttribute(Namespace = "http://util.vouchers.example.com/xsd", IsNullable = true)] 
    public object redeemData { get; set; } 
} 
+0

謝謝,我試過了,但仍然得到相同的錯誤:( – 2015-03-25 10:25:53