.net - una - porque usar interfaces c#
Usando WCF con clases abstractas (2)
¿Cómo defino DataContract para las clases abstractas en WCF?
Tengo una clase "Persona" que me comunico exitosamente usando WCF. Ahora agrego una nueva clase "Foo" referenciada de Person. Todo sigue siendo bueno. Pero cuando hago Foo abstracto y defino una subclase en su lugar falla. Falla en el lado del servidor con una CommunicationException, pero eso realmente no me dice mucho.
Mis clases simplificadas hechas para la prueba:
[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; }
}
Interesante.
Espero que el código falle en el constructor de la Person
ya que no puede crear una instancia de una clase abstracta.
Me lo imaginé. Debe especificar las subclases en la clase base abstracta usando "KnownType". La solución sería agregar esto en la clase Foo:
[DataContract]
[KnownType(typeof(Bar))] // <------ added
public abstract class Foo
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string BaseText { get; set; }
}
Echa un vistazo a este enlace .