【问题标题】:WCF SOAP Service add datatypes in response to complex typesWCF SOAP 服务添加数据类型以响应复杂类型
【发布时间】:2016-09-06 11:22:28
【问题描述】:

我有一个运行完美的 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>

此时不需要变量的名称。

类本身是一个带有 DataMember 的 DataContract。

【问题讨论】:

  • 在我看来,这会违背最佳实践,而且我不确定它是否真的可行,如果没有我想象的大量工作。
  • 好的,你会推荐什么来获取类型?有没有一种简单的方法可以将类型添加为属性?

标签: c# xml wcf soap


【解决方案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 文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多