Serialisierbare Typen

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

Sie können das Standardverhalten ändern, indem Sie das DataContractAttribute-Attribut und das DataMemberAttribute-Attribut auf die Typen und Member anwenden. Diese Funktion ist hilfreich in Situationen mit Typen, die nicht von Ihnen gesteuert und nicht mit weiteren Attributen versehen werden können. Der DataContractSerializer erkennt solche nicht markierten Typen.

Standardwerte für die Serialisierung

Sie können das DataContractAttribute-Attribut und das DataMemberAttribute-Attribut anwenden, um die Serialisierung von Typen und Membern explizit zu steuern oder anzupassen. Darüber hinaus können Sie diese Attribute auf private Felder anwenden. Doch auch Typen, die nicht mit diesen Attributen markiert sind, werden serialisiert und deserialisiert. Folgende Regeln und Ausnahmen gelten:

  • Der DataContractSerializer leitet einen Datenvertrag von Typen ohne Attribute unter Verwendung der Eigenschaften der neu erstellten Typen ab.

  • Alle öffentlichen Felder sowie Eigenschaften mit öffentlicher get- oder set-Methode werden serialisiert, es sei denn, Sie wenden auf diesen Member das IgnoreDataMemberAttribute-Attribut an.

  • Die Serialisierungssemantik gleicht der des XmlSerializer.

  • In nicht markierten Typen werden nur öffentliche Typen mit Konstruktoren serialisiert, die nicht über Parameter verfügen. Die Ausnahme dieser Regel bildet das ExtensionDataObject unter Verwendung der IExtensibleDataObject-Schnittstelle.

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

  • XmlSerializerAttribute (beispielsweise XmlElement, XmlAttribute, XmlIgnore, XmlInclude usw.) werden ignoriert.

  • Wird das DataContractAttribute-Attribut nicht auf einen angegebenen Typ angewendet, ignoriert der Serialisierer jeden Member des Typs, auf den das DataMemberAttribute-Attribut angewendet wurde.

  • Die KnownTypes-Eigenschaft wird in Typen unterstützt, die nicht mit dem DataContractAttribute-Attribut markiert sind. Hierzu zählt die Unterstützung des KnownTypeAttribute-Attributs für nicht markierte Typen.

  • Sollen öffentliche Member, Eigenschaften oder Felder von der Serialisierung ausgenommen werden, wenden Sie das IgnoreDataMemberAttribute-Attribut auf den entsprechenden Member an.

Vererbung

Nicht markierte Typen (Typen ohne DataContractAttribute-Attribut) können von Typen erben, die dieses Attribut besitzen. Der umgekehrte Vorgang ist jedoch nicht möglich: Typen mit diesem Attribut können nicht von nicht markierten Typen erben. Diese Regel wird in erster Linie deshalb erzwungen, um die Abwärtskompatibilität mit in früheren Versionen von .NET Framework geschriebenem Code sicherzustellen.

Siehe auch