2016-09-06 78 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文档。