Delen via


Serialiseerbare typen

DataContractSerializer Standaard worden alle openbaar zichtbare typen geserialiseerd. Alle openbare eigenschappen voor lezen/schrijven en velden van het type worden geserialiseerd.

U kunt het standaardgedrag wijzigen door de DataContractAttribute en DataMemberAttribute kenmerken toe te passen op de typen en leden. Deze functie kan handig zijn in situaties waarin u typen hebt die niet onder uw beheer vallen en niet kunnen worden gewijzigd om kenmerken toe te voegen. De DataContractSerializer herkent dergelijke 'niet-gemarkeerde' typen.

Standaardinstellingen voor serialisatie

U kunt de DataContractAttribute en DataMemberAttribute kenmerken toepassen om expliciet de serialisatie van typen en leden te bepalen of aan te passen. Daarnaast kunt u deze kenmerken toepassen op privévelden. Zelfs typen die niet zijn gemarkeerd met deze kenmerken, worden echter geserialiseerd en gedeserialiseerd. De volgende regels en uitzonderingen zijn van toepassing:

  • Hiermee DataContractSerializer wordt een gegevenscontract afgeleid van typen zonder kenmerken met behulp van de standaardeigenschappen van de zojuist gemaakte typen.

  • Alle openbare velden en eigenschappen met openbare get en set methoden worden geserialiseerd, tenzij u het IgnoreDataMemberAttribute kenmerk op dat lid toepast.

  • De serialisatiesemantiek zijn vergelijkbaar met die van de XmlSerializer.

  • In niet-gemarkeerde typen worden alleen openbare typen geserialiseerd met constructors die geen parameters hebben. De uitzondering op deze regel wordt ExtensionDataObject gebruikt met de IExtensibleDataObject interface.

  • Alleen-lezenvelden, eigenschappen zonder een get of set methode en eigenschappen met interne of persoonlijke set methoden get worden niet geserialiseerd. Dergelijke eigenschappen worden genegeerd en er wordt geen uitzondering gegenereerd, behalve in het geval van verzamelingen met alleen-ophalen.

  • XmlSerializer kenmerken (zoals XmlElement, XmlAttribute, XmlIgnore, enzovoort XmlInclude) worden genegeerd.

  • Als u het DataContractAttribute kenmerk niet toepast op een bepaald type, negeert de serializer een lid in dat type waarop het DataMemberAttribute kenmerk wordt toegepast.

  • De KnownTypes eigenschap wordt ondersteund in typen die niet zijn gemarkeerd met het DataContractAttribute kenmerk. Dit omvat ondersteuning voor het KnownTypeAttribute kenmerk voor niet-gemarkeerde typen.

  • Als u zich wilt afmelden voor het serialisatieproces voor openbare leden, eigenschappen of velden, past u het IgnoreDataMemberAttribute kenmerk toe op dat lid.

Overname

Niet-gemarkeerde typen (typen zonder kenmerk DataContractAttribute ) kunnen overnemen van typen die dit kenmerk wel hebben. Het omgekeerde is echter niet toegestaan: typen met het kenmerk kunnen niet worden overgenomen van niet-gemarkeerde typen. Deze regel wordt voornamelijk afgedwongen om compatibiliteit met eerdere versies van .NET Framework te garanderen.

Zie ook