Vom Datenvertragsserialisierer unterstützte TypenTypes Supported by the Data Contract Serializer

Windows Communication Foundation (WCF) verwendet die DataContractSerializer als standardserialisierungsmodul beim Konvertieren von Daten in XML und XML in Daten umzuwandeln.Windows Communication Foundation (WCF) uses the DataContractSerializer as its default serialization engine to convert data into XML and to convert XML back into data. DataContractSerializer ist für die Serialisierung von Datenvertragstypen konzipiert.The DataContractSerializer is designed to serialize data contract types. Es unterstützt jedoch viele andere Typen, die Sie sich als Typen mit einem impliziten Datenvertrag vorstellen können.However, it supports many other types, which can be thought of as having an implicit data contract. Die folgende Liste enthält alle Typen, die serialisiert werden können:The following is a complete list of types that can be serialized:

Einschränkungen bei der Verwendung bestimmter Typen im teilweise vertrauenswürdigen ModusLimitations of Using Certain Types in Partial Trust Mode

In der folgenden Liste sind die Einschränkungen aufgeführt, die bei Verwendung bestimmter Typen in Szenarien im teilweise vertrauenswürdigen Modus gelten:The following is a list of limitations when using certain types in partial trust mode scenarios:

  • 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.To serialize or deserialize a type that implements ISerializable in partially-trusted code using the DataContractSerializer requires the SerializationFormatter and UnmanagedCode permissions.

  • Beim Ausführen von WCF-Code in teilweise Vertrauenswürdigkeit Modus, die Serialisierung und Deserialisierung von readonly Felder (beide public und private) wird nicht unterstützt.When running WCF code in Partial Trust mode, the serialization and deserialization of readonly fields (both public and private) is not supported. Das liegt daran, dass die generierte IL nicht überprüfbar ist und deshalb höhere Berechtigungen erfordert.This is because the generated IL is unverifiable and therefore requires elevated permissions.

  • Sowohl DataContractSerializer als auch XmlSerializer werden in einer teilweise vertrauenswürdigen Umgebung unterstützt.Both the DataContractSerializer and the XmlSerializer are supported in a partial trust environment. Allerdings unterliegt die Verwendung von DataContractSerializer den folgenden Bedingungen:However, use of the DataContractSerializer is subject to the following conditions:

    • Alle serialisierbaren [DataContract] -Typen müssen öffentlich sein.All serializable [DataContract] types must be public.

    • Alle serialisierbaren [DataMember] -Felder oder -Eigenschaften in einem [DataContract] -Typ müssen öffentlich sein und Schreib-/Lesezugriff besitzen.All serializable [DataMember] fields or properties in a [DataContract] type must be public and read/write. Die Serialisierung und Deserialisierung von readonly -Feldern wird nicht unterstützt, wenn WCF in einer teilweise vertrauenswürdigen Anwendung ausgeführt wird.The serialization and deserialization of readonly fields is not supported when running WCF in a partially-trusted application.

    • Das [Serializable]/ISerializable] -Programmiermodell wird in einer teilweise vertrauenswürdigen Umgebung nicht unterstützt.The [Serializable]/ISerializable] programming model is not supported in a partial trust environment.

    • Bekannte Typen müssen im Code oder in einer Konfiguration auf Computerebene (Machine.config) angegeben werden.Known types must be specified in code or machine-level configuration (Machine.config). Bekannte Typen können aus Sicherheitsgründen nicht in einer Konfiguration auf Anwendungsebene angegeben werden.Known types cannot be specified in application-level configuration for security reasons.

  • 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.Types that implement IObjectReference throw an exception in a partially-trusted environment because the GetRealObject method requires the security permission [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)].

Weitere Hinweise zur SerialisierungAdditional Notes on Serialization

Die folgenden Regeln gelten auch für vom Datenvertragsserialisierer unterstützte Typen:The following rules also apply to types supported by the Data Contract Serializer:

  • Generische Typen werden vom Datenvertragsserialisierer vollständig unterstützt.Generic types are fully supported by the data contract serializer.

  • Typen, die NULL-Werte zulassen, werden vom Datenvertragsserialisierer vollständig unterstützt.Nullable types are fully supported by the data contract serializer.

  • Schnittstellentypen werden entweder als Object oder – im Fall von Auflistungsschnittstellen – als Auflistungstypen behandelt.Interface types are treated either as Object or, in the case of collection interfaces, as collection types.

  • Sowohl Strukturen als auch Klassen werden unterstützt.Both structures and classes are supported.

  • DataContractSerializer unterstützt das vom XmlSerializer -Webdienst und vom ASP.NETASP.NET -Webdienst verwendete Programmiermodell nicht.The DataContractSerializer does not support the programming model used by the XmlSerializer and ASP.NETASP.NET Web services. Es werden insbesondere keine Attribute wie XmlElementAttribute und XmlAttributeAttributeunterstützt.In particular, it does not support attributes like XmlElementAttribute and XmlAttributeAttribute. Um die Unterstützung für dieses Programmiermodell zu aktivieren, muss WCF verwenden umgeschaltet werden die XmlSerializer statt der DataContractSerializer.To enable support for this programming model, WCF must be switched to use the XmlSerializer instead of the DataContractSerializer.

  • Der DBNull -Typ wird auf besondere Weise behandelt.The DBNull type is treated in a special way. 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.It is a singleton type, and upon deserialization the deserializer respects the singleton constraint and points all DBNull references to the singleton instance. Da DBNull ein serialisierbarer Typ ist, wird eine SerializationFormatter -Berechtigung gefordert.Because DBNull is a serializable type, it demands SerializationFormatter permission.

Siehe auchSee Also

XML- und ADO.NET-Typen in DatenverträgenXML and ADO.NET Types in Data Contracts
Verwenden von DatenverträgenUsing Data Contracts
Serialisierbare TypenSerializable Types
Sammlungstypen in DatenverträgenCollection Types in Data Contracts
Enumerationstypen in DatenverträgenEnumeration Types in Data Contracts