2009-11-27 9 views
6

, was der Unterschied zwischen Klasse ist ohne Datacontract-Attribute:Datacontract & Datamember Attribute - wie sie Art beeinflussen

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

und die gleiche Klasse mit Datacontract-Attribute:

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

Ich meine, tut WCF behandelt diese beiden Arten in unterschiedlicher Weise bei der Codierung usw.?

Mit oder ohne diese Attribute meines WCF-Dienst funktioniert ...

Danke, Pawel

Antwort

10

.NET 3.5 SP1 Vor wenn Sie nicht Ihre Immobilie mit einem Datamember nicht in dem ausgesetzt war Attribut markieren haben WSDL und nicht serialisiert. Ab .NET 3.5 SP1 enthält die DataContractSerializer automatisch alle öffentlichen Eigenschaften, sodass Sie sie nicht mehr mit diesem Attribut dekorieren müssen.

+13

Leider ist es im 3.5 SP1-Fall nicht ganz so einfach, aber das ist die Grundidee. Ohne die in der Klasse definierten DataContract- oder DataMember-Attribute werden alle Felder * und * -Eigenschaften in XML serialisiert. Dazu gehören die privaten automatisch generierten Sicherungsspeicherfelder für automatische Eigenschaften der Form 'public int MyValue {get; einstellen; } 'und nennt sie' k__BackingField'. Wenn Sie die Attribute DataContract und DataMember explizit hinzufügen, wird der DataContractSerializer auf die private Feldserialisierung verzichten. –

Verwandte Themen