Freigeben über


Serialisierbare Typen

Standardmäßig serialisiert der DataContractSerializer alle öffentlich sichtbaren Typen. Alle öffentlichen Lese- und Schreibeigenschaften und Felder des Typs werden serialisiert.

Sie können das Standardverhalten ändern, indem Sie die DataContractAttribute und DataMemberAttribute Attribute auf die Typen und Member anwenden. Dieses Feature kann in Situationen nützlich sein, in denen Sie Typen haben, die nicht unter Ihrer Kontrolle stehen und nicht geändert werden können, um Attribute hinzuzufügen. Dies DataContractSerializer erkennt solche "nichtmarkierten" Typen.

Standardwerte für die Serialisierung

Sie können die Attribute DataContractAttribute und DataMemberAttribute anwenden, um die Serialisierung von Typen und Mitgliedern explizit zu steuern oder anzupassen. Darüber hinaus können Sie diese Attribute auf private Felder anwenden. Selbst Typen, die nicht mit diesen Attributen gekennzeichnet sind, werden serialisiert und deserialisiert. Es gelten die folgenden Regeln und Ausnahmen:

  • Der DataContractSerializer Datenvertrag wird aus Typen ohne Attribute abgeleitet, wobei die Standardeigenschaften der neu erstellten Typen verwendet werden.

  • Alle öffentlichen Felder und Eigenschaften mit öffentlichen get Und set Methoden werden serialisiert, es sei denn, Sie wenden das IgnoreDataMemberAttribute Attribut auf dieses Element an.

  • Die Serialisierungssemantik ähnelt denen der XmlSerializer.

  • In nichtmarkierten Typen werden nur öffentliche Typen mit Konstruktoren, die keine Parameter enthalten, serialisiert. Die Ausnahme von dieser Regel betrifft die Verwendung von ExtensionDataObject mit der IExtensibleDataObject Schnittstelle.

  • Schreibgeschützte Felder, Eigenschaften ohne eine get- oder set-Methode sowie Eigenschaften mit internen oder privaten set- oder get-Methoden werden nicht serialisiert. Diese Eigenschaften werden ignoriert, und es wird keine Ausnahme ausgelöst. Ausgenommen hiervon sind get-exklusive Auflistungen.

  • XmlSerializer Attribute (wie XmlElement, XmlAttribute, XmlIgnore, XmlInclude und so weiter) werden ignoriert.

  • Wenn Sie das DataContractAttribute Attribut nicht auf einen bestimmten Typ anwenden, ignoriert der Serializer alle Member in diesem Typ, auf die das DataMemberAttribute Attribut angewendet wird.

  • Die KnownTypes Eigenschaft wird in Typen unterstützt, die nicht mit dem DataContractAttribute Attribut gekennzeichnet sind. Dies schließt die Unterstützung des KnownTypeAttribute Attributs für nichtmarkierte Typen ein.

  • Um den Serialisierungsprozess für öffentliche Member, Eigenschaften oder Felder zu deaktivieren, wenden Sie das IgnoreDataMemberAttribute Attribut auf dieses Element an.

Vererbung

Nicht markierte Typen (Typen ohne Attribut DataContractAttribute ) können von Typen erben, die über dieses Attribut verfügen. Das Umgekehrte ist jedoch nicht zulässig: Typen mit dem Attribut können nicht von nicht markierten Typen erben. Diese Regel wird in erster Linie erzwungen, um die Abwärtskompatibilität mit Code sicherzustellen, der in früheren Versionen von .NET Framework geschrieben wurde.

Siehe auch