开发者

Using WCF with abstract classes

开发者 https://www.devze.com 2023-01-04 16:49 出处:网络
How do I define DataContract for abstract classes in WCF? I have a class \"Person\" which I communicate successfully using WCF. Now I add a new class \"Foo\" referenced from Person. All still good.

How do I define DataContract for abstract classes in WCF?

I have a class "Person" which I communicate successfully using WCF. Now I add a new class "Foo" referenced from Person. All still good. But when I make Foo abstract and define a sub class instead it fails. It fails on the server side with a CommunicationException, but that doesn't really tell me much.

My simplified classes made for testing:

[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 { 开发者_Python百科get; set; }
}

[DataContract]
public class Bar : Foo
{
    [DataMember]
    public string SubText { get; set; }
}


I figured it out. You need to specify the subclasses on the abstract base class using "KnownType". The solution would be to add this on the Foo class:

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

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

Check out this link.


Interesting.

I would expect that code to fail in the Person constructor since you can't directly instantiate an Abstract Class.

0

精彩评论

暂无评论...
验证码 换一张
取 消