Dela via


Serialiserbara typer

Som standard DataContractSerializer serialiserar serialiseras alla offentligt synliga typer. Alla offentliga läs-/skrivegenskaper och fält av typen serialiseras.

Du kan ändra standardbeteendet genom att tillämpa attributen DataContractAttribute och DataMemberAttribute på typerna och medlemmarna Den här funktionen kan vara användbar i situationer där du har typer som inte står under din kontroll och inte kan ändras för att lägga till attribut. Identifierar DataContractSerializer sådana "omarkerade" typer.

Standardvärden för serialisering

Du kan använda attributen DataContractAttribute och DataMemberAttribute för att uttryckligen styra eller anpassa serialiseringen av typer och medlemmar. Dessutom kan du använda dessa attribut för privata fält. Men även typer som inte är markerade med dessa attribut serialiseras och deserialiseras. Följande regler och undantag gäller:

  • Härleder DataContractSerializer ett datakontrakt från typer utan attribut med standardegenskaperna för de nyligen skapade typerna.

  • Alla offentliga fält och egenskaper med offentliga getset metoder och metoder serialiseras, såvida du inte använder attributet för den IgnoreDataMemberAttribute medlemmen.

  • Serialiseringssemantiken liknar serialiseringssemantiken i XmlSerializer.

  • I omärkta typer serialiseras endast offentliga typer med konstruktorer som inte har parametrar. Undantaget till den här regeln används ExtensionDataObject med IExtensibleDataObject gränssnittet.

  • Skrivskyddade fält, egenskaper utan en eller set -getmetod och egenskaper med interna eller privata set fält eller get metoder serialiseras inte. Sådana egenskaper ignoreras och inget undantag utlöses, förutom när det gäller samlingar med endast get.

  • XmlSerializer attribut (till exempel XmlElement, XmlAttribute, XmlIgnore, XmlIncludeoch så vidare) ignoreras.

  • Om du inte tillämpar attributet på DataContractAttribute en viss typ ignorerar serialiseraren alla medlemmar i den DataMemberAttribute typen som attributet tillämpas på.

  • Egenskapen KnownTypes stöds i typer som inte har markerats med attributet DataContractAttribute . Detta inkluderar stöd för KnownTypeAttribute attributet för omärkta typer.

  • Om du vill "avregistrera" serialiseringsprocessen för offentliga medlemmar, egenskaper eller fält använder du attributet för den IgnoreDataMemberAttribute medlemmen.

Arv

Omarkerade typer (typer utan DataContractAttribute attributet) kan ärva från typer som har det här attributet, men det omvända tillåts inte: typer med attributet kan inte ärva från omärkta typer. Den här regeln tillämpas främst för att säkerställa bakåtkompatibilitet med kod som skrivits i tidigare versioner av .NET Framework.

Se även