在SOAP消息中使用嵌套复杂类型 – WCF XmlSerializer

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

WCF中的SOAP消息反序列化问题 – 字段具有空值

它是一个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 } 

我有这些序列化问题,因为该服务的客户端有一个与WCF使用的“兼容”的序列化引擎。 当然,请求仍然是标准的XML(SOAP 1.2),但是嘿,WCF是微软的产品:)

一些解决方法:

  • 添加一个MessageFormater – 在服务器端实现一些反序列化逻辑 – 一篇关于它的好文章 ;
  • 添加MessageInspector – 读取SOAP请求并执行一些XML格式化(以便反序列化可以正常工作) – 您可以在此链接后阅读它。