简体   繁体   English

如何使用WCF序列化派生类型

[英]How to serialize derived types with WCF

I'm developing a WebService client and I'm having some problems with derived types serialization. 我正在开发WebService客户端,并且派生类型序列化遇到一些问题。

Request class 要求等级

[MessageContract(WrapperName = "Request", WrapperNamespace = "http://www.test.com", IsWrapped = true)]
public class ServiceRequest
{
    [MessageHeader(Namespace = "http://www.test.com")]
    public AuthHeader AuthHeader { get; set; }

    [MessageBodyMember(Name = "Data", Order = 0)]
    public ServiceObject Request { get; set; }

    public ServiceRequest() { }

    public ServiceRequest(AuthHeader authHeader, ServiceObject request)
    {
        AuthHeader = authHeader;        
        Request = request;
    }
}

ServiceObject class and derived type ServiceObject类和派生类型

[XmlRoot(Namespace = "http://www.test.com")]
[XmlInclude(typeof(TestRequest))]
public abstract class ServiceObject
{ }

[XmlRoot(ElementName = "Test", Namespace = "http://www.test.com")]
public class TestRequest
{ }

Result XML 结果XML

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:AuthHeader xmlns="http://www.test.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:h="http://www.test.com">
      <Username>TEST</Username>
      <Password>test</Password>
    </h:AuthHeader>
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Request xmlns="http://www.test.com">
      <Data xsi:type="TestRequest" />
    </Request>
  </s:Body>
</s:Envelope>

What do I have to change to properly serialize the derived class? 为了正确序列化派生类,我必须更改什么?

<Request xmlns="http://www.test.com">
    <Data>
       <Test/>
    </Data>
</Request>

Thanks in advance. 提前致谢。

its so simple: You should add KnownType attribute to your base class like this: 如此简单:您应该像这样在基类中添加KnownType属性:

[DataContract]
[KnownType(typeof(TestRequest))]
public abstract class ServiceObject
{ }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM