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

本文关键字:响应 复杂 类型 数据类型 SOAP 服务 添加 WCF | 更新日期: 2023-09-27 18:05:55

我在c#中有一个运行完美的WCF SOAP服务。但是现在我想将数据类型添加到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>

变量名在这里是不必要的。

类本身是一个带有datammember的datcontract

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

技术上可以返回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文档。