2010-06-23 10 views
20

WCF의 추상 클래스에 대해 DataContract를 정의하는 방법은 무엇입니까?추상 클래스에서 WCF 사용

WCF를 사용하여 성공적으로 통신하는 "Person"클래스가 있습니다. 이제 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; } 
} 

답변

30

나는 그것을 알아 냈다. "KnownType"을 사용하여 추상 기본 클래스에 하위 클래스를 지정해야합니다. 이 솔루션은 푸 클래스에 추가하는 것입니다 : 밖으로 this link

[DataContract] 
[KnownType(typeof(Bar))] // <------ added 
public abstract class Foo 
{ 
    [DataMember] 
    public int Id { get; set; } 

    [DataMember] 
    public string BaseText { get; set; } 
} 

확인합니다.

+0

완벽. 고마워요! –

2

흥미 롭.

추상적 인 클래스를 직접 인스턴스화 할 수 없으므로 코드가 Person 생성자에서 실패 할 것으로 예상됩니다.

+0

좋은 지적. 그게 실패한 이유일까요? 솔루션을 찾았습니다. 내 대답을 확인해 .. – stiank81

관련 문제