2011-04-26 112 views
0

我想使用數據契約類作爲其他一些類的基類。 我知道,如果我想定義兩個類之間的繼承,我需要使用'KnownType'屬性。數據合同類是否可以相互繼承?

但是,如果我想讓更多的兩個類之間的繼承..讓我說我也有類C繼承自類A - 我怎麼能做到這一點?

我嘗試將'[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; } 
} 

回答

1

我還以爲你會想;作爲B「是」A(用於WCF序列化的所有意圖和目的)。然而,正如你現在所知道的那樣,你是在說A「是B」,但並非總是如此(即C型),而是進一步調查......我錯了。

我遇到過Person:Contact示例幾次,我只是想爲了確保我的理解是正確的而進行搜索,而this link顯示的語法與您擁有的語法相同(關於anotations on基類)。它以如下方式顯示堆疊:

1. [DataContract] 
    2. [KnownType(typeof(Customer))] 
    3. [KnownType(typeof(Person))] 
    4. class Contact {...} 
    5. 
    6. [DataContract] 
    7. class Person : Contact {...} 
2
[DataContract] 
[KnownType(typeof(B))] 
[KnownType(typeof(C))] 
public class A 
{ 
... 
} 

... 
相關問題