Delen via


Klasse System.Runtime.Serialization.DataContractSerializer

In dit artikel vindt u aanvullende opmerkingen in de referentiedocumentatie voor deze API.

Gebruik de DataContractSerializer klasse om exemplaren van een type te serialiseren en deserialiseren in een XML-stroom of -document. U kunt bijvoorbeeld een type met de naam Person maken met eigenschappen die essentiële gegevens bevatten, zoals een naam en adres. Vervolgens kunt u een exemplaar van de Person klasse maken en bewerken en alle eigenschapswaarden in een XML-document schrijven voor later ophalen of in een XML-stroom voor direct transport. Het belangrijkste is dat het wordt gebruikt voor het DataContractSerializer serialiseren en deserialiseren van gegevens die worden verzonden in WCF-berichten (Windows Communication Foundation). Pas het DataContractAttribute kenmerk toe op klassen en het DataMemberAttribute kenmerk op klasseleden om eigenschappen en velden op te geven die worden geserialiseerd.

Zie Typen die worden ondersteund door de Serializer van het gegevenscontract voor een lijst met typen die kunnen worden geserialiseerd.

Als u de DataContractSerializerindeling wilt gebruiken, maakt u eerst een exemplaar van een klasse en een object dat geschikt is voor het schrijven of lezen van de indeling, bijvoorbeeld een exemplaar van de XmlDictionaryWriterklasse. Roep vervolgens de WriteObject methode aan om de gegevens te behouden. Als u gegevens wilt ophalen, maakt u een object dat geschikt is voor het lezen van de gegevensindeling (zoals een XmlDictionaryReader voor een XML-document) en roept u de ReadObject methode aan.

Zie Serialisatie en deserialisatie voor meer informatie over het gebruik van de DataContractSerializer

U kunt het type serializer voor een gegevenscontract instellen met behulp van het <dataContractSerializer-element> in een clienttoepassingsconfiguratiebestand.

Klassen voorbereiden voor serialisatie of deserialisatie

De DataContractSerializer wordt gebruikt in combinatie met de DataContractAttribute en DataMemberAttribute klassen. Als u een klasse wilt voorbereiden op serialisatie, past u de DataContractAttribute klasse toe. Voor elk lid van de klasse die gegevens retourneert die u wilt serialiseren, past u het DataMemberAttributetoe. U kunt velden en eigenschappen serialiseren, ongeacht toegankelijkheid: privé, beveiligd, intern, beveiligd intern of openbaar.

Uw schema geeft bijvoorbeeld een Customer met een ID eigenschap op, maar u hebt al een bestaande toepassing die gebruikmaakt van een type met Person een Name eigenschap. Als u een type wilt maken dat voldoet aan het contract, past u eerst de DataContractAttribute klasse toe. Pas vervolgens het DataMemberAttribute veld of elke eigenschap toe die u wilt serialiseren.

Notitie

U kunt de DataMemberAttribute toepassing toepassen op zowel privé- als openbare leden.

De uiteindelijke indeling van de XML hoeft geen tekst te zijn. In plaats daarvan schrijft de DataContractSerializer gegevens als een XML-infoset, waarmee u de gegevens kunt schrijven naar elke indeling die wordt herkend door de XmlReader en XmlWriter. Het wordt aanbevolen om de XmlDictionaryReader en XmlDictionaryWriter klassen te gebruiken om te lezen en schrijven, omdat beide zijn geoptimaliseerd voor gebruik met de DataContractSerializer.

Als u een klasse maakt die velden of eigenschappen bevat die moeten worden ingevuld voordat de serialisatie of deserialisatie plaatsvindt, gebruikt u callback-kenmerken, zoals wordt beschreven in callback-callbacks voor versietolerante serialisatie.

Toevoegen aan de verzameling bekende typen

Bij het serialiseren of deserialiseren van een object is het vereist dat het type 'bekend' is bij de DataContractSerializer. Begin met het maken van een exemplaar van een klasse die (zoals List<T>) implementeert en de bekende typen toevoegt IEnumerable<T> aan de verzameling. Maak vervolgens een exemplaar van het DataContractSerializer gebruik van een van de overbelastingen die de IEnumerable<T> (bijvoorbeeld DataContractSerializer(Type, IEnumerable<Type>)) gebruikt.

Notitie

In tegenstelling tot andere primitieve typen is de DateTimeOffset structuur standaard geen bekend type, dus deze moet handmatig worden toegevoegd aan de lijst met bekende typen (zie Bekende gegevenscontracttypen).

Compatibiliteit doorsturen

De DataContractSerializer informatie over gegevenscontracten die zijn ontworpen om compatibel te zijn met toekomstige versies van het contract. Dergelijke typen implementeren de IExtensibleDataObject interface. De interface bevat de ExtensionData eigenschap die een ExtensionDataObject object retourneert. Zie Forward-Compatible Data Contracts voor meer informatie.

Uitvoeren onder gedeeltelijke vertrouwensrelatie

Bij het instantiëren van het doelobject tijdens deserialisatie wordt de DataContractSerializer constructor van het doelobject niet aangeroepen. Als u een [DataContract] -type maakt dat toegankelijk is vanuit een gedeeltelijke vertrouwensrelatie (dat wil gezegd, het is openbaar en in een assembly waarop het AllowPartiallyTrustedCallers kenmerk is toegepast) en waarmee bepaalde beveiligingsgerelateerde acties worden uitgevoerd, moet u er rekening mee houden dat de constructor niet wordt aangeroepen. De volgende technieken werken met name niet:

  • Als u gedeeltelijke vertrouwenstoegang probeert te beperken door de constructor intern of privé te maken, of door een LinkDemand aan de constructor toe te voegen, hebben geen van beide gevolgen tijdens de deserialisatie onder gedeeltelijke vertrouwensrelatie.
  • Als u de klasse codeeert die ervan uitgaat dat de constructor is uitgevoerd, krijgt de klasse mogelijk een ongeldige interne status die misbruikbaar is.