WCF与不同命名空间的契约和多态性:给出了什么?

时间:2014-06-25 21:32:24

标签: c# wcf namespaces polymorphism

如何在这样的场景中执行多态:

如果我在名称空间Foo中有一个Dachshund类,它继承自Name Bar中的类Dog:

namespace Bar
{
  public class Dog
  {
    public string Color { get; set; }
    public string Bark { get; set; }
  }
}

namespace Foo
{
  public class Dachshund : Dog
  {
    public int Length { get; set; }
  }
}

我用Dachshund做一些狗的东西,但作为一只狗通过wcf,是什么给出的?一些序列化问题:

[ServiceBehavior]
public class myWcfService : ImyWcfService
{
  [OperationBehavior]
  public Message GetDog()
  {
    var myDach = new Dachshund();
    // do some stuff with my dach
    return new Message { Dog = myDach as Dog, Message = "I'm sending a dog" };
  }
}

public class Message
{
  public Dog Dog { get; set; }
  public string Message { get; set; }
}

1 个答案:

答案 0 :(得分:1)

您需要将[ServiceKnownType]属性添加到服务合同(定义服务操作的接口,而不是服务实现(实际类) ):

[ServiceContract]
[ServiceKnownType(typeof(Dachshund))]  // <- Add this attribute
public interface ImyWcfService
{
   //...
}

这足以让DataContractSerializer“知道”你的类并能够正确地序列化/反序列化它。