2016-09-06 79 views
1

我有一個完美運行的C#中的WCF SOAP服務。但是現在我想將數據類型添加到SOAP響應中。WCF SOAP服務添加數據類型以響應複雜類型

如果我返回布爾或字符串數​​組我得到的是這樣的:

<a:elements xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
     <b:string>ID</b:string> 
     <b:string>Description</b:string> 
     <b:string>Material</b:string> 
     <b:string>Price</b:string> 
    </a:elements> 

<a:updatePermissions xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
     <b:boolean>true</b:boolean> 
     <b:boolean>false</b:boolean> 
     <b:boolean>false</b:boolean> 
     <b:boolean>false</b:boolean> 
    </a:updatePermissions > 

但是,如果我發送一個複雜的類型我得到的東西像

<a:Elements> 
     <a:Material> 
     <a:Id>465</a:Id> 
     <a:Description>TestAddMaterial</a:Description> 
     <a:MaterialId>1</a:MaterialId> 
     <a:PriceForKg>0.03</a:PriceForKg> 
     </a:Material> 
</a:Elements> 

如何轉換類似數組響應的複雜類型的響應?

喜歡的東西:

<a:Elements> 
     <a:Material> 
     <a:integer>465</a:integer> 
     <a:string>TestAddMaterial</a:string> 
     <a:integer>1</a:integer> 
     <a:double>0.03</a:double> 
    </a:Material> 
    </a:Elements> 

變量的名稱是沒有必要在這一點上。

類itselfe是一個帶有DataMember的DataContract。

+0

在我看來,這將違背最佳實踐,我不確定它是否真的有可能,並非沒有我想象中的大量工作。 – mbrdev

+0

好的,你會推薦什麼類型的?有沒有簡單的方法來添加類型作爲屬性? – SPI

回答

1

技術上你可以返回XElement。任何自定義XML選項都需要您自己構建XML。

舉個例子:

[ServiceContract] 
public interface ISomeService 
{ 
    [OperationContract, XmlSerializerFormat] 
    XmlElement SomeMethod(XmlElement someParameter); 
} 

您也可以使用XmlDocument實例作爲默認的DataContractSerializer可以序列XmlElement實例的documentElement屬性。

https://msdn.microsoft.com/en-us/library/ms733901.aspx

雖然上面的選項不是標準的做法。相反,您應該使用DataContract,並且應該按照您希望將其序列化爲XML的方式進行構建。當服務方法返回自定義類型時,WCF將隱式地將其序列化爲XML文檔。