2012-03-28 206 views
0

Hi和天大家好檢索WCF內蒙古XML,從XMLHTTP POST請求

我能解決它通過這個話題後,XML HTTP POST請求發送到WCF:現在Handle POST request from XML HTTP in WCF

但是,我我仍然試圖找到從請求中檢索內部XML的正確方法。我在XML形式發送請求:

<?xml version=""1.0"" encoding=""UTF-8"" standalone= ""yes""?><AFISQuery transid=""3356434""><Request CIFNO =""123456789"" IC= ""770707-07-7777"">TEST</Request></AFISQuery> 

在AFISQuery類,我將它設置爲:

[DataContract(Namespace = "")] 
public class AFISQuery 
{ 
    public AFISQuery(string transid) 
    { 
     this.transid = transid; 
    } 

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

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

結果,我能得到請求信息(「TEST」),但無法獲得transid信息。我試圖環顧論壇,但沒有發現類似的問題。

我的問題是,是否有可能從請求的內部XML中檢索信息?對於這個例子,他們是CIFNo,transid和ICNo。

在此先感謝:)

回答

0

您能夠檢索請求的原因是請求是一個XML元素。 XML元素直接映射到DataMembers,因此Request正確地反序列化到AFISQuery數據合同類型上的Request DataMember。

'transid'的問題是它是一個屬性。 DataContractSerializer不支持屬性,並且不能以任何方式支持它們。您需要更改請求XML,以使其作爲元素進行傳輸,就像請求是元素一樣。

還要注意,即使您現在將Request設置爲一個值,XML中「請求」元素上的屬性也會被完全忽略。這可能會也可能不會。

如果您關心屬性,或者您確實想要支持可序列化的成員作爲屬性,則可能需要從DataContractSerializer切換到XmlSerializer。很容易做到這一點,只需修飾您關心的服務或操作 - 您想要切換到XmlSerializer - 使用[XmlSerializerFormat。]