【问题标题】:Using nested complex types in SOAP Message - WCF XmlSerializer在 SOAP 消息中使用嵌套的复杂类型 - WCF XmlSerializer
【发布时间】:2013-06-06 19:55:56
【问题描述】:

我最近在 StackOverflow 上发布了一个问题:

SOAP message deserialization issue in WCF - fields have null values

这与 WCF 序列化引擎之一有关,XmlSerializer,用于序列化/反序列化 SOAP 消息。反序列化起初不起作用 - 一些命名空间问题。

回到现在:)

如果用[XmlElement, MessageBodyMember] 修饰的字段是简单类型,现在可以很好地反序列化。

自定义类型有一个问题:它们已设置,但它们的字段有空值:(

我应该对 XmlSerializer 进行配置吗?

[MessageContract]
public class Request
{
    [XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified), MessageBodyMember]
    public XType X { get; set; }
}

[what to write here?]
public class XType
{
    [XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified), body member?]
    public string AString { get; set; }

    ... maybe another nested complex objects
}

【问题讨论】:

  • 为什么要使用 XmlSerializer?你必须使用它吗?它已经过时了。
  • XmlSerializer 它在命名空间范围等方面比 DataContractSerializer 更可配置(据我所知) - 例如,我需要“XmlSchemaForm = Unqualified”设置。

标签: c# wcf soap


【解决方案1】:

我遇到了这些序列化问题,因为服务客户端的序列化引擎与 WCF 使用的引擎不“兼容”。当然,请求仍然是标准 XML(SOAP 1.2),但是,WCF 是 Microsoft 产品 :)

一些解决方法:

  • 添加一个 MessageFormater - 在服务器端实现一些反序列化逻辑 - 关于这一点的 article 很好;
  • 添加一个 MessageInspector - 读取 SOAP 请求并进行一些 XML 格式化(以便反序列化工作正常) - 您可以在 this link 之后阅读它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多