Typen die worden ondersteund door de Serializer van het gegevenscontract
Windows Communication Foundation (WCF) maakt gebruik van de DataContractSerializer standaard serialisatie-engine om gegevens te converteren naar XML en XML te converteren naar gegevens. Het DataContractSerializer is ontworpen om gegevenscontracttypen te serialiseren. Het ondersteunt echter veel andere typen, die kunnen worden beschouwd als een impliciet gegevenscontract. Hier volgt een volledige lijst met typen die kunnen worden geserialiseerd:
Alle openbaar zichtbare typen met een constructor die geen parameters heeft.
Gegevenscontracttypen. Dit zijn typen waarop het DataContractAttribute kenmerk is toegepast. Nieuwe aangepaste typen die zakelijke objecten vertegenwoordigen, moeten normaal gesproken worden gemaakt als gegevenscontracttypen. Zie Gegevenscontracten en serialiseerbare typen gebruiken voor meer informatie.
Verzamelingstypen. Dit zijn typen die lijsten met gegevens vertegenwoordigen. Dit kunnen reguliere matrices van typen of verzamelingstypen zijn, zoals ArrayList en Dictionary<TKey,TValue>. Het CollectionDataContractAttribute kenmerk kan worden gebruikt om de serialisatie van deze typen aan te passen, maar is niet vereist. Zie Verzamelingstypen in gegevenscontracten voor meer informatie.
Opsommingstypen. Opsommingen, waaronder vlag-opsommingen, kunnen serialiseerbaar zijn. Optioneel kunnen opsommingstypen worden gemarkeerd met het DataContractAttribute kenmerk. In dat geval moet elk lid dat aan serialisatie deelneemt, worden gemarkeerd met het EnumMemberAttribute kenmerk. Leden die niet zijn gemarkeerd, worden niet geserialiseerd. Zie Opsommingstypen in gegevenscontracten voor meer informatie.
Primitieve typen .NET Framework. De volgende typen die zijn ingebouwd in .NET Framework, kunnen allemaal worden geserialiseerd en worden beschouwd als primitieve typen: Byte, , SByteInt16, UInt32UInt16Int64Int32, UInt64CharDecimalDoubleBooleanSingleen . ObjectString
Andere primitieve typen. Deze typen zijn geen primitieven in .NET Framework, maar worden beschouwd als primitieven in de geserialiseerde XML-vorm. Deze typen zijn DateTime, DateTimeOffset, , TimeSpan, Guid, , Uri, en XmlQualifiedNamematrices van Byte.
Notitie
In tegenstelling tot andere primitieve typen is DateTimeOffset dit standaard geen bekend type. Zie Bekende typen gegevenscontracten voor meer informatie.
Typen die zijn gemarkeerd met het SerializableAttribute kenmerk. Veel typen die zijn opgenomen in de .NET Framework-basisklassebibliotheek, vallen in deze categorie. Het DataContractSerializer volledige ondersteunt dit serialisatieprogrammeermodel dat werd gebruikt door externe communicatie van .NET Framework, de BinaryFormatteren de SoapFormatter, inclusief ondersteuning voor de ISerializable interface.
Typen die onbewerkte XML of typen vertegenwoordigen die ADO.NET relationele gegevens vertegenwoordigen. De XmlElement en matrix van XmlNode typen wordt ondersteund als een manier om XML rechtstreeks weer te geven. Daarnaast worden typen die de IXmlSerializable interface implementeren ondersteund, inclusief het gerelateerde XmlSchemaProviderAttribute kenmerk en de XDocument typen.XElement Het ADO.NETDataTable type en het DataSet type (evenals de getypte afgeleide klassen) implementeren allemaal de IXmlSerializable interface en passen daarom in deze categorie. Zie XML- en ADO.NET typen in gegevenscontracten voor meer informatie.
Beperkingen van het gebruik van bepaalde typen in de modus Gedeeltelijke vertrouwensrelatie
Hier volgt een lijst met beperkingen bij het gebruik van bepaalde typen in scenario's met gedeeltelijke vertrouwensmodus:
Als u een type wilt serialiseren of deserialiseren dat in gedeeltelijk vertrouwde code wordt geïmplementeerd ISerializable met behulp van de DataContractSerializer vereiste en SerializationFormatterUnmanagedCode machtigingen.
Wanneer u WCF-code uitvoert in de modus Gedeeltelijke vertrouwen , wordt de serialisatie en deserialisatie van
readonly
velden (beidepublic
enprivate
) niet ondersteund. Dit komt doordat de gegenereerde IL niet kan worden geverifieerd en daarom verhoogde machtigingen vereist.Zowel de DataContractSerializer als de XmlSerializer worden ondersteund in een gedeeltelijke vertrouwensomgeving. Het gebruik van de toepassing DataContractSerializer is echter onderhevig aan de volgende voorwaarden:
Alle serialiseerbare
[DataContract]
typen moeten openbaar zijn.Alle serialiseerbare
[DataMember]
velden of eigenschappen in een[DataContract]
type moeten openbaar en lezen/schrijven zijn. De serialisatie en deserialisatie van velden wordt niet ondersteund bij het uitvoeren vanreadonly
WCF in een gedeeltelijk vertrouwde toepassing.Het
[Serializable]
/ISerializable]
programmeermodel wordt niet ondersteund in een gedeeltelijke vertrouwensomgeving.Bekende typen moeten worden opgegeven in de configuratie op code- of machineniveau (
Machine.config
). Bekende typen kunnen om veiligheidsredenen niet worden opgegeven in de configuratie op toepassingsniveau.
Typen die een uitzondering implementeren IObjectReference in een gedeeltelijk vertrouwde omgeving, omdat voor de GetRealObject methode de beveiligingsmachtiging
[SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]
is vereist.
Aanvullende notities over serialisatie
De volgende regels zijn ook van toepassing op typen die worden ondersteund door de Data Contract Serializer:
Algemene typen worden volledig ondersteund door de serializer van het gegevenscontract.
Typen null-waarden worden volledig ondersteund door de serialisatiefunctie van het gegevenscontract.
Interfacetypen worden behandeld als Object of, in het geval van verzamelingsinterfaces, als verzamelingstypen.
Zowel structuren als klassen worden ondersteund.
Het DataContractSerializer biedt geen ondersteuning voor het programmeermodel dat wordt gebruikt door de XmlSerializer en ASP.NET-webservices. Het biedt met name geen ondersteuning voor kenmerken zoals XmlElementAttribute en XmlAttributeAttribute. Als u ondersteuning voor dit programmeermodel wilt inschakelen, moet WCF worden overgeschakeld naar het gebruik in plaats van het XmlSerializerDataContractSerializer.
Het DBNull type wordt op een speciale manier behandeld. Het is een singletontype en bij deserialisatie respecteert de deserializer de singleton-beperking en verwijst alle
DBNull
verwijzingen naar het singleton-exemplaar. OmdatDBNull
het een serialiseerbaar type is, is er toestemming vereist SerializationFormatter .