数据合同类可以相互继承吗?

时间:2011-04-26 13:53:12

标签: wcf

我想使用数据契约类作为其他一些类的基类。 我知道如果我想在两个类之间定义继承,我需要使用'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; }
}

2 个答案:

答案 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 {...}