Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
In dit artikel vindt u aanvullende opmerkingen in de referentiedocumentatie voor deze API.
Pas het DataContractAttribute kenmerk toe op typen (klassen, structuren of opsommingen) die worden gebruikt in serialisatie- en deserialisatiebewerkingen door de DataContractSerializer. Als u berichten verzendt of ontvangt met behulp van de WCF-infrastructuur (Windows Communication Foundation), moet u ook de DataContractAttribute klassen toepassen die gegevens bevatten en bewerken die in berichten worden verzonden. Zie Gegevenscontracten gebruiken voor meer informatie over gegevenscontracten.
U moet ook de DataMemberAttribute waarde toepassen op een veld, eigenschap of gebeurtenis die waarden bevat die u wilt serialiseren. Door de DataContractAttributetoe te passen, kunt u de DataContractSerializer gegevens expliciet serialiseren en deserialiseren.
Waarschuwing
U kunt de DataMemberAttribute velden toepassen op privévelden. Houd er rekening mee dat de gegevens die door het veld worden geretourneerd (zelfs als het privé is) worden geserialiseerd en gedeserialiseerd, en dus kunnen worden bekeken of onderschept door een kwaadwillende gebruiker of proces.
Zie de onderwerpen in Het gebruik van gegevenscontracten voor meer informatie over gegevenscontracten.
Gegevenscontracten
Een gegevenscontract is een abstracte beschrijving van een set velden met een naam en gegevenstype voor elk veld. Het gegevenscontract bestaat buiten een enkele implementatie, zodat services op verschillende platforms kunnen samenwerken. Zolang de gegevens die tussen de services worden doorgegeven, voldoen aan hetzelfde contract, kunnen alle services de gegevens verwerken. Deze verwerking wordt ook wel een losjes gekoppeld systeem genoemd. Een gegevenscontract is ook vergelijkbaar met een interface waarin het contract aangeeft hoe gegevens moeten worden geleverd, zodat deze kunnen worden verwerkt door een toepassing. Het gegevenscontract kan bijvoorbeeld een gegevenstype aanroepen met de naam 'Persoon' met twee tekstvelden, 'Voornaam' en 'Achternaam'. Als u een gegevenscontract wilt maken, past u de DataContractAttribute toe op de klasse en past u de DataMemberAttribute toe op de velden of eigenschappen die moeten worden geserialiseerd. Wanneer de gegevens worden geserialiseerd, voldoen de gegevens aan het gegevenscontract dat impliciet is ingebouwd in het type.
Opmerking
Een gegevenscontract verschilt aanzienlijk van een echte interface in het gedrag van overerving. Interfaces worden overgenomen door eventuele afgeleide typen. Wanneer u de DataContractAttribute op een basisklasse toepast, nemen de afgeleide typen het kenmerk of het gedrag niet over. Als een afgeleid type echter een gegevenscontract heeft, worden de gegevensleden van de basisklasse geserialiseerd. U moet echter DataMemberAttribute toepassen op nieuwe leden in een afgeleide klasse opdat ze serialiseerbaar worden.
XML-schemadocumenten en het hulpprogramma SvcUtil
Als u gegevens uitwisselt met andere services, moet u het gegevenscontract beschrijven. Voor de huidige versie van de DataContractSerializerversie kan een XML-schema worden gebruikt om gegevenscontracten te definiëren. (Andere vormen van metagegevens/beschrijving kunnen voor hetzelfde doel worden gebruikt.) Als u een XML-schema wilt maken op basis van uw toepassing, gebruikt u het hulpprogramma hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe) met de opdrachtregeloptie /dconly . Wanneer de invoer voor het hulpprogramma een assembly is, genereert het hulpprogramma standaard een set XML-schema's waarmee alle gegevenscontracttypen in die assembly worden gedefinieerd. Omgekeerd kunt u ook het hulpprogramma Svcutil.exe gebruiken om Visual Basic- of C#-klassedefinities te maken die voldoen aan de vereisten van XML-schema's die gebruikmaken van constructies die kunnen worden uitgedrukt door gegevenscontracten. In dit geval is de opdrachtregeloptie /dconly niet vereist.
Als de invoer voor het hulpprogramma Svcutil.exe een XML-schema is, maakt het hulpprogramma standaard een set klassen. Als u deze klassen bekijkt, merkt u dat de DataContractAttribute is toegepast. U kunt deze klassen gebruiken om een nieuwe toepassing te maken om gegevens te verwerken die moeten worden uitgewisseld met andere services.
U kunt het hulpprogramma ook uitvoeren op een eindpunt dat een WSDL-document (Web Services Description Language) retourneert om automatisch de code en configuratie te genereren om een WCF-client (Windows Communication Foundation) te maken. De gegenereerde code bevat typen die zijn gemarkeerd met de DataContractAttribute.
Bestaande typen opnieuw gebruiken
Een gegevenscontract heeft twee basisvereisten: een stabiele naam en een lijst met leden. De stabiele naam bestaat uit de naamruimte uniform resource identifier (URI) en de lokale naam van het contract. Wanneer u de DataContractAttribute klasse toepast op een klasse, wordt standaard de klassenaam gebruikt als de lokale naam en de naamruimte van de klasse (voorafgegaan door "http://schemas.datacontract.org/2004/07/") als de naamruimte-URI. U kunt de standaardinstellingen overschrijven door de Name en Namespace eigenschappen in te stellen. U kunt de naamruimte ook wijzigen door de ContractNamespaceAttribute naamruimte toe te passen op de naamruimte. Gebruik deze mogelijkheid wanneer u een bestaand type hebt dat gegevens precies op de gewenste manier verwerkt, maar een andere naamruimte en klassenaam heeft dan het gegevenscontract. Door de standaardwaarden te overschrijven, kunt u uw bestaande type opnieuw gebruiken en de geserialiseerde gegevens laten voldoen aan het gegevenscontract.
Opmerking
In elke code kunt u het woord DataContract gebruiken in plaats van het langere DataContractAttribute.
Versiebeheer
Een gegevenscontract kan ook geschikt zijn voor latere versies van zichzelf. Dat wil zeggen dat wanneer een latere versie van het contract extra gegevens bevat, die gegevens worden opgeslagen en geretourneerd aan een afzender ongewijzigd. Implementeer hiervoor de IExtensibleDataObject interface.
Zie Versiebeheer van datacontract voor meer informatie over versiebeheer.