Vom Datenvertragsserialisierer unterstützte Typen
Windows Communication Foundation (WCF) verwendet DataContractSerializer als Standardserialisierungsmodul, um Daten in XML und XML wieder in Daten zu konvertieren. 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<TKey,TValue>. Das CollectionDataContractAttribute -Attribut kann verwendet werden, um die Serialisierung dieser Typen anzupassen, es ist jedoch nicht erforderlich. Weitere Informationen finden Sie unter Auflistungstypen 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, Objectund 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, XmlQualifiedNamesowie Arrays von Byte.
Hinweis
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, die in der .NET Framework-Basisklassenbibliothek enthalten sind, gehören zu dieser Kategorie. 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.
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. Die ADO.NET-Typen DataTable und DataSet (sowie die zugehörigen typisierten abgeleiteten Klassen) implementieren die IXmlSerializable-Schnittstelle und passen daher in diese 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 Modus Teilweise vertrauenswürdig wird die Serialisierung und Deserialisierung von
readonly
-Feldern (sowohlpublic
als auchprivate
) 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 Deserialisierung vonreadonly
-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.
Werttypen, die NULL-Werte zulassen, werden vom Serialisierungsmodul für Datenverträge 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 von XmlSerializer und den ASP.NET-Webdiensten verwendete Programmiermodell nicht. Es werden insbesondere keine Attribute wie XmlElementAttribute und XmlAttributeAttributeunterstützt. Um die Unterstützung für dieses Programmiermodell zu aktivieren, muss WCF auf die Verwendung von XmlSerializer anstelle von DataContractSerializer umgestellt 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. DaDBNull
ein serialisierbarer Typ ist, wird eine SerializationFormatter -Berechtigung gefordert.