Freigeben über


Vom Serialisierungsprogramm für den Datenvertrag unterstützte Typen

Windows Communication Foundation (WCF) verwendet DataContractSerializer als Standard-Serialisierungsmodul zur Konvertierung von Daten in XML und zur Rückkonvertierung von XML in Daten. DataContractSerializer ist darauf ausgelegt, Datenvertragstypen zu serialisieren. Es unterstützt jedoch viele andere Typen, die als impliziter Datenvertrag betrachtet werden können. Nachfolgend finden Sie eine vollständige Liste der Typen, die serialisiert werden können:

Einschränkungen der Verwendung bestimmter Typen im teilweisen Vertrauensmodus

Es folgt eine Liste der Einschränkungen bei der Verwendung bestimmter Typen in Szenarien mit teilweise vertrauenswürdigem Modus.

  • 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 Modus Teilweise vertrauenswürdig wird die Serialisierung und Deserialisierung von readonly-Feldern (sowohl public als auch private) nicht unterstützt. Dies liegt daran, dass die generierte IL unverifizierbar ist und daher erhöhte Berechtigungen erfordert.

  • Sowohl DataContractSerializer als auch XmlSerializer werden in einer teilweise vertrauenswürdigen Umgebung unterstützt. Die Verwendung von DataContractSerializer unterliegt jedoch 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 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 in der Konfiguration auf Code- oder Computerebene (Machine.config) angegeben werden. Bekannte Typen können aus Sicherheitsgründen nicht in der Konfiguration auf Anwendungsebene angegeben werden.

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

Weitere Hinweise zur Serialisierung

Die folgenden Regeln gelten auch für Typen, die vom Serializer für den Datenvertrag unterstützt werden:

  • Generische Typen werden vollständig vom Datenvertrags-Serialisierer unterstützt.

  • Nullable Wertetypen werden vollständig vom Datenvertrag-Serialisierer unterstützt.

  • Schnittstellentypen werden entweder als Object oder im Fall von Sammlungsschnittstellen als Sammlungstypen behandelt.

  • Sowohl Strukturen als auch Klassen werden unterstützt.

  • Das DataContractSerializer unterstützt das von den XmlSerializer und ASP.NET-Webdiensten verwendete Programmiermodell nicht. Insbesondere werden Attribute wie XmlElementAttribute und XmlAttributeAttribute nicht unterstützt. Um die Unterstützung für dieses Programmiermodell zu aktivieren, muss WCF von XmlSerializer zu DataContractSerializer umgestellt werden.

  • Der DBNull Typ wird auf besondere Weise behandelt. Es handelt sich um einen Singletontyp, und bei der Deserialisierung berücksichtigt der Deserialisierer die Singleton-Einschränkung und verweist auf alle DBNull Verweise auf die Singleton-Instanz. Da DBNull ein serialisierbarer Typ ist, wird SerializationFormatter-Berechtigung benötigt.

Siehe auch