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:

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

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