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

时间:2012-08-01 11:35:55

标签: c# wcf soap

我最近在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
}

1 个答案:

答案 0 :(得分:1)

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

一些解决方法:

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