Vom Datenvertragsserialisierer unterstützte TypenTypes Supported by the Data Contract Serializer
Windows Communication Foundation (WCF) verwendet die DataContractSerializer als seine standardserialisierungs-Engine, um Daten in XML zu konvertieren und zum Konvertieren von XML in Daten.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:
Alle öffentlich sichtbaren Typen, die über einen Konstruktor ohne Parameter verfügen.All publicly visible types that have a constructor that does not have parameters.
Datenvertragstypen.Data contract types. Hierbei handelt es sich um Typen, auf die das DataContractAttribute -Attribut angewendet wurde.These are types to which the DataContractAttribute attribute has been applied. Neue benutzerdefinierte Typen, die Geschäftsobjekte darstellen, sollten normalerweise als Datenvertragstypen erstellt werden.New custom types that represent business objects should normally be created as data contract types. Weitere Informationen finden Sie unter Using Data Contracts und serialisierbare Typen.For more information, see Using Data Contracts and Serializable Types.
Auflistungstypen.Collection types. Hierbei handelt es sich um Typen, die Datenlisten darstellen.These are types that represent lists of data. Diese Typen können reguläre Arrays von Typen oder Auflistungstypen sein, z. B. ArrayList und Dictionary<TKey,TValue>.These can be regular arrays of types, or collection types, such as ArrayList and Dictionary<TKey,TValue>. Das CollectionDataContractAttribute -Attribut kann verwendet werden, um die Serialisierung dieser Typen anzupassen, es ist jedoch nicht erforderlich.The CollectionDataContractAttribute attribute can be used to customize the serialization of these types, but is not required. Weitere Informationen finden Sie unter Sammlungstypen in Datenverträgen.For more information, see Collection Types in Data Contracts.
Enumerationstypen.Enumeration types. Enumerationen, einschließlich Flagenumerationen, sind serialisierbar.Enumerations, including flag enumerations, are serializable. 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.Optionally, enumeration types can be marked with the DataContractAttribute attribute, in which case every member that participates in serialization must be marked with the EnumMemberAttribute attribute. Nicht gekennzeichnete Member werden nicht serialisiert.Members that are not marked are not serialized. Weitere Informationen finden Sie unter Enumerationstypen in Datenverträgen.For more information, see Enumeration Types in Data Contracts.
Primitive Typen von .NET Framework..NET Framework primitive types. 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, Objectund String.The following types built into the .NET Framework can all be serialized and are considered to be primitive types: Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Boolean, Char, Decimal, Object, and String.
Andere primitive Typen.Other primitive types. Diese Typen sind in .NET Framework keine primitiven Typen, werden im serialisierten XML-Formular jedoch als primitive Typen behandelt.These types are not primitives in the .NET Framework but are treated as primitives in the serialized XML form. Diese Typen sind DateTime, DateTimeOffset, TimeSpan, Guid, Uri, XmlQualifiedNamesowie Arrays von Byte.These types are DateTime, DateTimeOffset, TimeSpan, Guid, Uri, XmlQualifiedName, and arrays of Byte.
Hinweis
Im Gegensatz zu anderen primitiven Typen ist DateTimeOffset standardmäßig kein bekannter Typ.Unlike other primitive types, DateTimeOffset is not a known type by default. Weitere Informationen finden Sie unter Data Contract Known Types).For more information, see Data Contract Known Types).
Mit dem SerializableAttribute -Attribut gekennzeichnete Typen.Types marked with the SerializableAttribute attribute. Viele Typen in der .NET Framework-Basisklassenbibliothek fallen in diese Kategorie.Many types included in the .NET Framework base class library fall into this category. DataContractSerializer unterstützt dieses Serialisierungs-Programmiermodell, das von .NET Framework-Remoting verwendet wurde, sowie BinaryFormatterund SoapFormatternicht nur vollständig, sondern bietet darüber hinaus Unterstützung für die ISerializable -Schnittstelle.The DataContractSerializer fully supports this serialization programming model that was used by .NET Framework remoting, the BinaryFormatter, and the SoapFormatter, including support for the ISerializable interface.
Typen, die darstellen, unformatierte XML-Index oder Typen, die ADO.NET relationale Daten darstellen.Types that represent raw XML or types that represent ADO.NET relational data. XmlElement und das Array von XmlNode -Typen werden als Methoden unterstützt, um XML direkt darzustellen.The XmlElement and array of XmlNode types are supported as a way of representing XML directly. 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.Additionally, types that implement the IXmlSerializable interface are supported, including the related XmlSchemaProviderAttribute attribute, and the XDocument and XElement types. ADO.NETDataTable Typ und die DataSet Typ (sowie seine typisierten abgeleiteten Klassen) implementieren die IXmlSerializable -Schnittstelle und fallen daher unter dieser Kategorie.The ADO.NETDataTable type and the DataSet type (as well as its typed derived classes) all implement the IXmlSerializable interface, and therefore fit into this category. Weitere Informationen finden Sie unter XML- und ADO.NET-Typen in Datenverträgen.For more information, see XML and ADO.NET Types in Data Contracts.
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 im teilweiser Vertrauenswürdigkeit Modus, die Serialisierung und Deserialisierung von
readonly
Felder (beidepublic
undprivate
) wird nicht unterstützt.When running WCF code in Partial Trust mode, the serialization and deserialization ofreadonly
fields (bothpublic
andprivate
) 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 vonreadonly
-Feldern wird nicht unterstützt, wenn WCF in einer teilweise vertrauenswürdigen Anwendung ausgeführt wird.The serialization and deserialization ofreadonly
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.
Die DataContractSerializer unterstützt nicht das Programmiermodell von verwendet die XmlSerializer und ASP.NET-Webdienste.The DataContractSerializer does not support the programming model used by the XmlSerializer and ASP.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 allDBNull
references to the singleton instance. DaDBNull
ein serialisierbarer Typ ist, wird eine SerializationFormatter -Berechtigung gefordert.BecauseDBNull
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