sti*_*k81 21 .net wcf abstract-class datacontract
如何在WCF中为抽象类定义DataContract?
我有一个类"人",我使用WCF成功通信.现在我添加一个从Person引用的新类"Foo".一切都还不错.但是当我将Foo抽象化并定义一个子类时,它就失败了.它在服务器端使用CommunicationException失败,但这并没有真正告诉我太多.
我的简化课程用于测试:
[DataContract]
public class Person
{
public Person()
{
SomeFoo = new Bar { Id = 7, BaseText = "base", SubText = "sub" };
}
[DataMember]
public int Id { get; set; }
[DataMember]
public Foo SomeFoo { get; set; }
}
[DataContract]
public abstract class Foo
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string BaseText { get; set; }
}
[DataContract]
public class Bar : Foo
{
[DataMember]
public string SubText { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
sti*_*k81 33
我想到了.您需要使用"KnownType"在抽象基类上指定子类.解决方案是在Foo类上添加:
[DataContract]
[KnownType(typeof(Bar))] // <------ added
public abstract class Foo
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string BaseText { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
看看这个链接.