WCF SOAP Service添加数据类型以响应复杂类型

时间:2016-09-06 11:22:28

标签: c# xml wcf soap

我在C#中有一个运行完美的WCF SOAP服务。但现在我想将数据类型添加到SOAP响应中。

如果我返回一个boolean或string数组,我会得到类似的结果:

<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。

1 个答案:

答案 0 :(得分:1)

从技术上讲,您可以返回XElement。任何自定义XML选项都需要您自己构建XML。

举个例子:

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

您还可以使用XmlDocument实例的DocumentElement属性,因为默认的DataContractSerializer可以序列化XmlElement个实例。

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

虽然上述选项不是标准做法。相反,你应该使用DataContract,它应该按照你希望它被序列化为XML的方式构建。当服务方法返回自定义类型时,WCF将隐式地将其序列化为XML文档。