我想使用数据契约类作为其他一些类的基类。 我知道如果我想在两个类之间定义继承,我需要使用'KnownType'属性。
但是如果我想在两个以上的类之间进行继承..让我说我还有继承自A类的C类 - 我怎么做呢?
我尝试将'[KnownType(typeof(C))]'添加到A类定义中 - 但它不起作用。
[DataContract]
[KnownType(typeof(B))]
public class A
{
[DataMember]
public string Value { get; set; }
}
[DataContract]
public class B : A
{
[DataMember]
public string OtherValue { get; set; }
}
[DataContract]
public class C : A
{
[DataMember]
public string OtherValue { get; set; }
}
答案 0 :(得分:2)
[DataContract]
[KnownType(typeof(B))]
[KnownType(typeof(C))]
public class A
{
...
}
...
答案 1 :(得分:1)
我原以为你想要;
[KnownType(typeof(A))]
public class B : A
{
...
}
因为B“是”A(对于WCF序列化的所有意图和目的)。然而,正如你现在所知道的那样,你说A“是一个”B,但情况并非总是如此(即C型),而是进一步调查......我错了。
我偶然遇到过Person:Contact示例,我只是想我会搜索它以确保我的理解是正确的,this link显示语法与你拥有它的方式相同(基类上的anotations)。它以下列方式显示堆叠;
1. [DataContract]
2. [KnownType(typeof(Customer))]
3. [KnownType(typeof(Person))]
4. class Contact {...}
5.
6. [DataContract]
7. class Person : Contact {...}