Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
Alle öffentlich sichtbaren Typen mit einem Konstruktor, der keine Parameter enthält.
Datentypen für Verträge. Dies sind 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 serialisierbaren Typen.
Sammlungstypen. Dies sind Typen, die Listen von Daten darstellen. Diese können reguläre Arrays von Typen oder Sammlungstypen wie ArrayList und Dictionary<TKey,TValue> sein. Das CollectionDataContractAttribute Attribut kann verwendet werden, um die Serialisierung dieser Typen anzupassen, ist jedoch nicht erforderlich. Weitere Informationen finden Sie unter Sammlungstypen in Datenverträgen.
Enumerationstypen. Enumerationen, einschließlich Flagenumerationen, sind serialisierbar. Optional können Enumerationstypen mit dem DataContractAttribute Attribut gekennzeichnet werden. In diesem Fall muss jedes Element, das an der Serialisierung teilnimmt, mit dem EnumMemberAttribute Attribut gekennzeichnet werden. Nicht markierte Mitglieder werden nicht serialisiert. Weitere Informationen finden Sie unter Enumerationstypen in Datenverträgen.
.NET Framework-Grundtypen. Die folgenden Typen, die im .NET Framework integriert sind, können serialisiert werden und gelten als primitive Typen: Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Boolean, Char, Decimal, Object, und String.
Andere Grundtypen. Diese Typen sind keine Grundtypen im .NET Framework, sondern werden als Grundtypen im serialisierten XML-Formular behandelt. Diese Typen sind DateTime, DateTimeOffset, TimeSpan, Guid, Uri, XmlQualifiedName, und Arrays von Byte.
Hinweis
Im Gegensatz zu anderen primitiven Typen ist DateTimeOffset standardmäßig kein bekannter Typ. Weitere Informationen finden Sie unter Data Contract Known Types).
Typen, die mit dem SerializableAttribute Attribut gekennzeichnet sind. Viele Typen, die in der .NET Framework-Basisklassenbibliothek enthalten sind, fallen in diese 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 rohes XML repräsentieren, oder Typen, die ADO.NET-relationale Daten repräsentieren. XmlElement und das Array von XmlNode -Typen werden als Methoden unterstützt, um XML direkt darzustellen. Darüber hinaus werden Typen, die die IXmlSerializable Schnittstelle implementieren, unterstützt, einschließlich des zugehörigen XmlSchemaProviderAttribute Attributs und der Typen XDocument und XElement. Der ADO.NETDataTable Typ und der DataSet Typ (sowie seine typierten abgeleiteten Klassen) implementieren die IXmlSerializable Schnittstelle und passen daher in diese Kategorie ein. Weitere Informationen finden Sie unter XML und ADO.NET Typen in Datenverträgen.
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 (sowohlpublicals auchprivate) 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 vonreadonlyFeldern 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
DBNullVerweise auf die Singleton-Instanz. DaDBNullein serialisierbarer Typ ist, wird SerializationFormatter-Berechtigung benötigt.