2009-11-27 8 views
6

¿cuál es la diferencia entre la clase sin DataContract atributos:DataContract y DataMember atributos - cómo afectan tipo

public class BankOperationResult 
{   
    public int CurrentAmount { get; set; } 
    public bool Success { get; set; } 
} 

y la misma clase con DataContract atributos:

[DataContract] 
public class BankOperationResult 
{   
    [DataMember] 
    public int CurrentAmount { get; set; } 
    [DataMember] 
    public bool Success { get; set; } 
} 

Es decir, hace golosinas WCF esos dos tipos de manera diferente cuando se codifica, etc.

Con o sin esos atributos mi servicio WCF funciona ...

Gracias, Pawel

Respuesta

10

Antes de .NET 3.5 SP1 si no marcó su propiedad con un DataMember atribuirlo no fue expuesto en el WSDL y no serializado. A partir de .NET 3.5 SP1, el DataContractSerializer incluirá automáticamente todas las propiedades públicas, por lo que ya no necesitará decorarlas con este atributo.

+13

Lamentablemente, no es * bastante * así de simple en el caso del 3.5 SP1, pero esa es la idea básica. Sin ningún atributo DataContract o DataMember definido en su clase, todos los campos * y * se serializarán en XML y esto incluye los campos de almacenamiento de respaldo privados generados automáticamente para las propiedades automáticas del formulario 'public int MyValue {get; conjunto; } 'y los nombrará' k__BackingField'. Agregar los atributos DataContract y DataMember explícitamente hará que DataContractSerializer renuncie a la serialización de campo privada. –

Cuestiones relacionadas