Jedes Mal wenn ich dieses Attribut treffen, sehe ich immer solche Nutzung:Vertrauliches Verhalten von DataContract?
[DataContract]
class DataTransferObject
{
[DataMember]
public int Value {get;set;}
}
Und in diesem Beispiel alle geerbten Mitglieder auf jede Eigenschaft oder ein Feld Datamember-Attribut gelten sollte, dies zu sehr ungeschickt und poilerplate Code führen kann. Aber vor kurzem fand ich (vielleicht geheime Funktion?) Eine sehr elegante Art und Weise, es zu benutzen:
[DataContract]
public abstract class DTOBase
{
}
public class MyDTO : DTOBase
{
public int Value {get;set;}
public MyDTO(){} //important part is here
}
Wichtiger Teil: Sie sollten immer explizit parameterlosen Konstruktor definieren, sonst wird es nicht richtig serialisiert.
Und ja. Es wird serialisieren alle seine öffentlichen Mitglieder, egal wie tief Vererbung sein wird, ohne die Notwendigkeit, Attribute auf Mitglieder oder Klassendefinitionen anzuwenden.
Ist das irgendwie irgendwo dokumentiert (habe ich nicht gefunden)? Denn ich war sehr erstickt, wie viel Vortex vermieden werden kann.