Freigeben über


Vom Datenvertragsserialisierer unterstützte Typen

Windows Communication Foundation (WCF) verwendet DataContractSerializer als Standardserialisierungsmodul, um Daten in XML und XML in Daten umzuwandeln. DataContractSerializer ist für die Serialisierung von Datenvertragstypen konzipiert. Es unterstützt jedoch viele andere Typen, die Sie sich als Typen mit einem impliziten Datenvertrag vorstellen können. Die folgende Liste enthält alle Typen, die serialisiert werden können:

  • Alle öffentlich sichtbaren Typen, die über einen Konstruktor ohne Parameter verfügen.

  • Datenvertragstypen. Hierbei handelt es sich um Typen, auf die das DataContractAttribute-Attribut angewendet wurde. Neue benutzerdefinierte Typen, die Geschäftsobjekte darstellen, sollten normalerweise als Datenvertragstypen erstellt werden. Weitere Informationen finden Sie unter Verwenden von Datenverträgen und Serialisierbare Typen.

  • Auflistungstypen. Hierbei handelt es sich um Typen, die Datenlisten darstellen. Diese Typen können reguläre Arrays von Typen oder Auflistungstypen sein, z. B. ArrayList und Dictionary. Das CollectionDataContractAttribute-Attribut kann verwendet werden, um die Serialisierung dieser Typen anzupassen, es ist jedoch nicht erforderlich. Weitere Informationen finden Sie unter Sammlungstypen in Datenverträgen.

  • Enumerationstypen. Enumerationen, einschließlich Flagenumerationen, sind serialisierbar. Optional können Enumerationstypen mit dem DataContractAttribute-Attribut gekennzeichnet werden. In diesem Fall muss jeder Member, der an der Serialisierung teilnimmt, mit dem EnumMemberAttribute-Attribut gekennzeichnet sein. Nicht gekennzeichnete Member werden nicht serialisiert. Weitere Informationen finden Sie unter Enumerationstypen in Datenverträgen.

  • Primitive Typen von .NET Framework. Die folgenden in .NET Framework integrierten Typen sind serialisierbar und werden als primitive Typen betrachtet: Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Boolean, Char, Decimal, Object und String.

  • Andere primitive Typen. Diese Typen sind in .NET Framework keine primitiven Typen, werden im serialisierten XML-Formular jedoch als primitive Typen behandelt. Diese Typen sind DateTime, DateTimeOffset, TimeSpan, Guid, Uri, XmlQualifiedName sowie Arrays von Byte.

    ms731923.note(de-de,VS.100).gifHinweis:
    Im Gegensatz zu anderen primitiven Typen ist DateTimeOffset standardmäßig kein bekannter Typ. Weitere Informationen finden Sie unter Bekannte Typen in Datenverträgen).

  • Mit dem SerializableAttribute-Attribut gekennzeichnete Typen. Viele Typen der .NET Framework-Basisklassenbibliothek fallen unter diese Kategorie. DataContractSerializer unterstützt dieses Serialisierungs-Programmiermodell, das von .NET Framework-Remoting verwendet wurde, sowie BinaryFormatter und SoapFormatter nicht nur vollständig, sondern bietet darüber hinaus Unterstützung für die ISerializable-Schnittstelle.

  • Typen, die unformatiertes XML darstellen, oder Typen, die relationale ADO.NET-Daten darstellen. XmlElement und das Array von XmlNode-Typen werden als Methoden unterstützt, um XML direkt darzustellen. Außerdem werden Typen unterstützt, die die IXmlSerializable-Schnittstelle implementieren, einschließlich dem zugehörigen XmlSchemaProviderAttribute-Attribut sowie dem XDocument-Typ und dem XElement-Typ. Der ADO.NET DataTable-Typ und der DataSet-Typ (sowie seine typisierten abgeleiteten Klassen) implementieren die IXmlSerializable-Schnittstelle und fallen daher unter dieser Kategorie. Weitere Informationen finden Sie unter XML- und ADO.NET-Typen in Datenverträgen.

Einschränkungen bei der Verwendung bestimmter Typen im teilweise vertrauenswürdigen Modus

In der folgenden Liste sind die Einschränkungen aufgeführt, die bei Verwendung bestimmter Typen in Szenarien im teilweise vertrauenswürdigen Modus gelten:

  • Zum Serialisieren oder Deserialisieren eines Typs, der ISerializable in teilweise vertrauenswürdigem Code mithilfe des DataContractSerializer implementiert, sind die SerializationFormatter-Berechtigung und die UnmanagedCode-Berechtigung erforderlich.

  • Beim Ausführen von WCF-Code im Teilweise Vertrauenswürdigkeit-Modus wird die Serialisierung und Deserialisierung von readonly-Feldern (sowohl public als auch private) nicht unterstützt. Das liegt daran, dass die generierte IL nicht überprüfbar ist und deshalb höhere Berechtigungen erfordert.

  • Sowohl DataContractSerializer als auch XmlSerializer werden in einer teilweise vertrauenswürdigen Umgebung unterstützt. Allerdings unterliegt die Verwendung von DataContractSerializer den folgenden Bedingungen:

    • Alle serialisierbaren [DataContract]-Typen müssen öffentlich sein.

    • Alle serialisierbaren [DataMember]-Felder oder -Eigenschaften in einem [DataContract]-Typ müssen öffentlich sein und Schreib-/Lesezugriff besitzen. Die Serialisierung und die Deserialisierung von readonly-Feldern wird nicht unterstützt, wenn WCF in einer teilweise vertrauenswürdigen Anwendung ausgeführt wird.

    • Das [Serializable]/ISerializable]-Programmiermodell wird in einer teilweise vertrauenswürdigen Umgebung nicht unterstützt.

    • Bekannte Typen müssen im Code oder in einer Konfiguration auf Computerebene (Machine.config) angegeben werden. Bekannte Typen können aus Sicherheitsgründen nicht in einer Konfiguration auf Anwendungsebene angegeben werden.

  • Typen, die IObjectReference implementieren, lösen in einer teilweise vertrauenswürdigen Umgebung eine Ausnahme aus, weil die GetRealObject-Methode die Sicherheitsberechtigung [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)] erfordert.

Weitere Hinweise zur Serialisierung

Die folgenden Regeln gelten auch für vom Datenvertragsserialisierer unterstützte Typen:

  • Generische Typen werden vom Datenvertragsserialisierer vollständig unterstützt.

  • Typen, die NULL-Werte zulassen, werden vom Datenvertragsserialisierer vollständig unterstützt.

  • Schnittstellentypen werden entweder als Object oder – im Fall von Auflistungsschnittstellen – als Auflistungstypen behandelt.

  • Sowohl Strukturen als auch Klassen werden unterstützt.

  • DataContractSerializer unterstützt das vom XmlSerializer-Webdienst und vom ASP.NET-Webdienst verwendete Programmiermodell nicht. Es werden insbesondere keine Attribute wie XmlElementAttribute und XmlAttributeAttribute unterstützt. Um die Unterstützung für dieses Programmiermodell zu aktivieren, muss WCF auf die Verwendung von XmlSerializer anstelle von DataContractSerializer umgeschaltet werden.

  • Der DBNull-Typ wird auf besondere Weise behandelt. Dieser Typ ist ein Singeltontyp. Bei einer Deserialisierung berücksichtigt der Deserialisierer die Singletoneinschränkung und lässt alle DBNull-Verweise auf die Singletoninstanz zeigen. Da DBNull ein serialisierbarer Typ ist, wird eine SerializationFormatter-Berechtigung gefordert.

Siehe auch

Konzepte

XML- und ADO.NET-Typen in Datenverträgen
Verwenden von Datenverträgen
Serialisierbare Typen
Sammlungstypen in Datenverträgen
Enumerationstypen in Datenverträgen