2011-04-26 4 views
0

데이터 계약 클래스를 다른 클래스의 기본 클래스로 사용하려고합니다. 두 클래스 사이에서 상속을 정의하려면 '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; } 
} 

답변

1

내가 원하는 거라고 생각했을 것이다;

[KnownType(typeof(A))] 
public class B : A 
{ 
... 
} 

B "는"A "입니다 (WCF 직렬화의 모든 의도와 목적에 해당). 그러나, 당신이 현재 가지고 있듯이, 당신은 A가 "B"라고 말하며, 항상 그렇다고 볼 수는 없습니다 (즉, C 타입).

필자는 예를 몇 번 예를 들어 설명했습니다. 제 이해가 올바른지 확인하기 위해 검색하고 싶다고 생각했습니다. this link은 같은 방식으로 구문을 보여줍니다 (기본 클래스). 다음과 같은 방식으로 스태킹을 표시합니다.

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

... 
관련 문제