tipo serializacion reflejar net error deserializacion c# .net wcf

c# - serializacion - Excepción del contrato de datos. No se puede serializar



error al reflejar el tipo vb net (5)

Tengo el siguiente DataContract de WCF:

[DataContract] public class Occupant { private string _Name; private string _Email; private string _Organization; private string _Badge; public Occupant(string name, string badge, string organization) { Name = name; Badge = badge; Organization = organization; } public Occupant(string name, string badge) { Value = name; Key = badge; } [DataMember] public string Key { get { return _Name; } set { _Name = value; } } [DataMember] public string Value { get { return _Badge; } set { _Badge = value; } } [DataMember] public string Name { get { return _Name; } set { _Name = value; } } [DataMember] public string Email { get { return _Email; } set { _Email = value; } } [DataMember] public string Organization { get { return _Organization; } set { _Organization = value; } } [DataMember] public string Badge { get { return _Badge; } set { _Badge = value; } } }

Cuando trato de acceder a este servicio a través del navegador web (está alojado en IIS), recibo este error:

System.Runtime.Serialization.InvalidDataContractException: escriba ''MyNamespace.Occupant'' no se puede serializar. Considere marcarlo con el atributo DataContractAttribute y marcar todos sus miembros que desee serializar con el atributo DataMemberAttribute. Si el tipo es una colección, considere marcarlo con CollectionDataContractAttribute.

Uno de mis métodos es devolver una List de tipo Occupant . ¿Esto lo estaría causando?


Como ha proporcionado uno o más constructores de inicialización, también deberá agregar un constructor sin parámetros (predeterminado).

es decir, debe agregar:

[DataContract] public class Occupant { // *** Needed only for Serialization public Occupant() {} ...

Esto se debe a que el constructor predeterminado desaparece cuando agrega un constructor explícito.

[El problema no está en que el método devuelva List<Occupant> , ya que los métodos no están serializados).]


Debe agregar un constructor de parámetro vacío a su clase de contrato de datos


Intenta agregar un constructor vacío. Muchas veces eso activará el serializador.


Mi suposición sería porque _Email no se ha inicializado. Puede establecer EmitDefaultValue como false y ver si eso ayuda:

[DataMember(EmitDefaultValue = false)] public string Email {


Necesita un constructor sin parámetros predeterminado. Nunca planeo usar el mío, así que agregué un resumen para IntelliSense y lancé una excepción en tiempo de ejecución para evitar que se usara.

/// <summary> /// parameterless default constructor only for serialization /// </summary> public MyClass() { throw new NotImplementedException("parameterless default constructor only for serialization"); }