使用不同名称空间的WCF契约和多态性:给出了什么?
本文关键字:多态性 什么 契约 WCF 空间 | 更新日期: 2023-09-27 18:10:14
如何在这样的场景中执行多态性:
如果我在命名空间Foo中有一个类Dachshund,它继承自命名空间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; }
}
}
和我用腊肠狗做一些狗的事情,但通过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; }
}
您需要将[ServiceKnownType]
属性添加到您的服务契约(定义服务操作的接口,而不是服务实现(实际类):
[ServiceContract]
[ServiceKnownType(typeof(Dachshund))] // <- Add this attribute
public interface ImyWcfService
{
//...
}
这将足以让DataContractSerializer"知道"您的类,并能够正确地序列化/反序列化它。