2009-11-27 3 views
6

qual è la differenza tra la classe senza DataContract attributi:DataContract & DataMember attributi - come influenzano tipo

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

e la stessa classe con DataContract attributi:

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

Voglio dire, fa WCF tratta questi due tipi in modo diverso durante la codifica, ecc.?

Con o senza quegli attributi mio servizio WCF funziona ...

Grazie, Pawel

risposta

10

Prima di .NET 3.5 SP1 se non ha segnato la vostra proprietà con un DataMember attribuirlo non è stato esposto nel WSDL e non serializzato. A partire da .NET 3.5 SP1 il DataContractSerializer includerà automaticamente tutte le proprietà pubbliche, quindi non sarà più necessario decorarle con questo attributo.

+13

Sfortunatamente, non è * abbastanza * così semplice nel caso di 3.5 SP1, ma questa è l'idea di base. Senza gli attributi DataContract o DataMember definiti sulla classe, tutte le proprietà * e * dei campi verranno serializzate in XML e ciò include i campi dell'archivio di backup generati automaticamente privati ​​per le proprietà automatiche del modulo 'public int MyValue {get; impostato; } 'e li chiameremo' k__BackingField'. Aggiungendo esplicitamente gli attributi DataContract e DataMember, DataContractSerializer annullerà la serializzazione del campo privato. –