【发布时间】:2014-08-16 14:58:03
【问题描述】:
如何在这样的场景中执行多态性:
如果我在命名空间 Foo 中有一个从命名空间 Bar 中的类 Dog 继承的 Dachshund 类:
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; }
}
【问题讨论】:
-
您需要
[ServiceKnownType(typeof(Dachshund))]。否则 DataContractSerializer 不知道如何处理该类并将其序列化为 Dog。 -
我添加了属性,但它仍然不会发送合同。我将对象值映射为值并且有效。这就是我要避免的
-
如果我将
[ServiceKnownType]属性添加到服务 contract (接口,而不是实际的类),它对我有用。你试过吗? -
哦,我傻了,我把它添加到 Dog 类...
-
让我知道这是否解决了您的问题,我可以发布正确的答案...
标签: c# wcf namespaces polymorphism