DataContractSerializer Třída

Definice

Serializuje a deserializuje instanci typu do datového proudu XML nebo dokumentu pomocí zadaného datového kontraktu. Tato třída se nemůže dědit.

public ref class DataContractSerializer sealed : System::Runtime::Serialization::XmlObjectSerializer
public sealed class DataContractSerializer : System.Runtime.Serialization.XmlObjectSerializer
type DataContractSerializer = class
    inherit XmlObjectSerializer
Public NotInheritable Class DataContractSerializer
Inherits XmlObjectSerializer
Dědičnost
DataContractSerializer

Poznámky

Použijte třídu DataContractSerializer, abyste serializovali a deserializovali instance typu do datového proudu XML nebo dokumentu. Můžete například vytvořit typ s názvem Person s vlastnostmi, které obsahují základní data, jako je název a adresa. Pak můžete vytvořit instanci Person třídy a zapsat všechny její hodnoty vlastností do dokumentu XML pro pozdější načtení nebo v datovém proudu XML pro okamžitý přenos. Nejdůležitější je, že DataContractSerializer se používá k serializaci a deserializaci dat odesílaných ve zprávách WCF (Windows Communication Foundation). Použijte atribut DataContractAttribute na třídy a atribut DataMemberAttribute na členy tříd k určení vlastností a polí, které jsou serializovány.

Seznam typů, které lze serializovat, naleznete v části Typy podporované serializátorem kontraktu dat.

Chcete-li použít DataContractSerializer, nejprve vytvořte instanci třídy a objekt odpovídající zápisu nebo čtení formátu, například instance XmlDictionaryWriter. Potom zavolejte metodu WriteObject pro zachování dat. Pokud chcete načíst data, vytvořte objekt odpovídající pro čtení datového formátu (například XmlDictionaryReader pro dokument XML) a volejte metodu ReadObject .

Další informace o použití DataContractSerializernaleznete v tématu Serializace a deserializace.

Typ serializátoru kontraktu dat můžete nastavit pomocí <prvku dataContractSerializer> v konfiguračním souboru klientské aplikace.

Příprava tříd pro serializaci nebo deserializaci

Používá se DataContractSerializer v kombinaci s třídami DataContractAttribute a DataMemberAttribute. Chcete-li připravit třídu pro serializaci, aplikujte DataContractAttribute na třídu. Pro každého člena třídy, který vrací data, která chcete serializovat, použijte DataMemberAttribute. Můžete serializovat pole a vlastnosti bez ohledu na jejich úroveň přístupnosti: soukromé, chráněné, interní, chráněné interní nebo veřejné.

Například schéma specifikuje Customer s vlastností ID, ale již máte existující aplikaci, která používá typ pojmenovaný Person s vlastností Name. Chcete-li vytvořit typ, který odpovídá smlouvě, nejprve použijte třídu DataContractAttribute . Potom použijte DataMemberAttribute u každého pole nebo vlastnosti, které chcete serializovat.

Note

Tuto možnost DataMemberAttribute můžete použít pro soukromé i veřejné členy.

Konečný formát XML nemusí být text. DataContractSerializer Místo toho zapisuje data jako informační sadu XML, která umožňuje zapisovat data do libovolného formátu rozpoznaného operátorem XmlReader a XmlWriter. Doporučujeme, abyste ke čtení a zápisu používali třídy XmlDictionaryReader , XmlDictionaryWriter protože oba jsou optimalizované pro práci s rozhraním DataContractSerializer.

Pokud vytváříte třídu s poli nebo vlastnostmi, které musí být vyplněny před provedením serializace nebo deserializace, použijte atributy zpětného volání, jak je popsáno v Version-Tolerant Serialization Callbacks.

Přidejte do kolekce známé typy

Při serializaci nebo deserializaci objektu je nutné, aby byl typ "známý" pro DataContractSerializer. Začněte vytvořením instance třídy, která implementuje IEnumerable<T> (například List<T>) a přidá známé typy do kolekce. Pak vytvořte instanci DataContractSerializer využitím jedné z přetížených verzí, které přijímají IEnumerable<T> (například DataContractSerializer(Type, IEnumerable<Type>)).

Note

Na rozdíl od jiných primitivních typů DateTimeOffset není struktura ve výchozím nastavení známým typem, takže je nutné ji ručně přidat do seznamu známých typů (viz Známé typy kontraktu dat).

Přesměrová kompatibilita

DataContractSerializer rozumí datovým smlouvám, které byly navrženy tak, aby byly kompatibilní s budoucími verzemi smlouvy. Takové typy implementují IExtensibleDataObject rozhraní. Rozhraní obsahuje ExtensionData vlastnost, která vrací ExtensionDataObject objekt. Další informace najdete v tématu Forward-Compatible datové smlouvy.

Konstruktory

Name Description
DataContractSerializer(Type, DataContractSerializerSettings)

Inicializuje novou instanci DataContractSerializer třídy serializovat nebo deserializovat objekt zadaného typu a nastavení.

DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Inicializuje novou instanci DataContractSerializer třídy serializovat nebo deserializovat objekt zadaného typu. Tato metoda také určuje seznam známých typů, které mohou být přítomny v objektovém grafu, maximální počet položek grafu k serializaci, parametry pro ignorování neočekávaných dat, zda použít nestandardní konstrukty XML k zachování dat odkazu na objekt v grafu, náhradní pro vlastní serializaci a alternativu pro mapování xsi:type deklarací za běhu.

DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Inicializuje novou instanci DataContractSerializer třídy serializovat nebo deserializovat objekt zadaného typu. Tato metoda také určuje seznam známých typů, které mohou být přítomny v objektovém grafu, maximální počet položek grafu k serializaci, parametry pro ignorování neočekávaných dat, zda použít nestandardní xml konstrukty k zachování objektových referenčních dat v grafu a náhradní pro vlastní serializace.

DataContractSerializer(Type, IEnumerable<Type>)

Inicializuje novou instanci DataContractSerializer třídy serializovat nebo deserializovat objekt zadaného typu a kolekce známých typů, které mohou být přítomné v objektovém grafu.

DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Inicializuje novou instanci DataContractSerializer třídy serializovat nebo deserializovat objekt zadaného typu. Tato metoda také určuje seznam známých typů, které mohou být přítomny v objektovém grafu, maximální počet položek grafu k serializaci, parametry pro ignorování neočekávaných dat, zda použít nestandardní konstrukty XML k zachování dat odkazu na objekt v grafu, náhradní pro vlastní serializaci, element XML a obor názvů obsahující obsah, a alternativu pro mapování xsi:type deklarací za běhu.

DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Inicializuje novou instanci DataContractSerializer třídy serializovat nebo deserializovat objekt zadaného typu. Tato metoda také určuje seznam známých typů, které mohou být přítomny v objektovém grafu, maximální počet položek grafu k serializaci, parametry pro ignorování neočekávaných dat, zda použít nestandardní xml konstrukty k zachování objektových referenčních dat v grafu, náhradní pro vlastní serializace a element XML a obor názvů, které obsahují obsah.

DataContractSerializer(Type, String, String, IEnumerable<Type>)

Inicializuje novou instanci DataContractSerializer třídy serializovat nebo deserializovat objekt zadaného typu. Tato metoda také určuje kořenový element XML a obor názvů ve dvou řetězcových parametrech a také seznam známých typů, které mohou být přítomné v objektovém grafu.

DataContractSerializer(Type, String, String)

Inicializuje novou instanci DataContractSerializer třídy serializovat nebo deserializovat objekt zadaného typu pomocí zadaného elementu XML kořenového elementu a oboru názvů.

DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Inicializuje novou instanci DataContractSerializer třídy serializovat nebo deserializovat objekt zadaného typu. Tato metoda také určuje seznam známých typů, které mohou být přítomny v objektovém grafu, maximální počet položek grafu k serializaci, parametry pro ignorování neočekávaných dat, zda použít nestandardní xml konstrukty k zachování objektových referenčních dat v grafu, náhradní pro vlastní serializaci, parametry XmlDictionaryString , které určují element XML a obor názvů obsahující obsah, a alternativu pro mapování xsi:type deklarací za běhu.

DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Inicializuje novou instanci DataContractSerializer třídy serializovat nebo deserializovat objekt zadaného typu. Tato metoda také určuje seznam známých typů, které mohou být přítomny v objektovém grafu, maximální počet položek grafu k serializaci, parametry pro ignorování neočekávaných dat, zda použít nestandardní xml konstrukty k zachování objektových referenčních dat v grafu, náhradní pro vlastní serializace a parametry XmlDictionaryString , které určují xml element a obor názvů, které obsahují obsah.

DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>)

Inicializuje novou instanci DataContractSerializer třídy serializovat nebo deserializovat objekt zadaného typu. Tato metoda také určuje kořenový element XML a obor názvů ve dvou XmlDictionaryString parametrech a také seznam známých typů, které mohou být přítomny v objektovém grafu.

DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString)

Inicializuje novou instanci DataContractSerializer třídy serializovat nebo deserializovat objekt zadaného typu pomocí kořenového elementu XML a oboru názvů určeného prostřednictvím parametrů typu XmlDictionaryString.

DataContractSerializer(Type)

Inicializuje novou instanci DataContractSerializer třídy serializovat nebo deserializovat objekt zadaného typu.

Vlastnosti

Name Description
DataContractResolver

Získá komponentu použitou k dynamické mapování xsi:type deklarací na známé typy kontraktů.

DataContractSurrogate

Získá náhradní typ, který může rozšířit serializace nebo deserializace procesu.

IgnoreExtensionDataObject

Získá hodnotu, která určuje, zda má ignorovat data poskytnutá rozšířením třídy, když třída je serializována nebo deserializována.

KnownTypes

Získá kolekci typů, které mohou být přítomny v objekt grafu serializované pomocí této instance DataContractSerializer.

MaxItemsInObjectGraph

Získá maximální počet položek v grafu objektu serializovat nebo deserializovat.

PreserveObjectReferences

Získá hodnotu, která určuje, zda použít nestandardní xml konstrukty pro zachování objektu odkaz data.

SerializeReadOnlyTypes

Získá hodnotu, která určuje, zda jsou typy jen pro čtení serializovány.

Metody

Name Description
Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
IsStartObject(XmlDictionaryReader)

Určuje, zda je umístěn XmlDictionaryReader na objektu, který lze deserializovat.

IsStartObject(XmlReader)

Určuje, zda je umístěn XmlReader na objektu, který lze deserializovat.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ReadObject(Stream)

Načte datový proud XML nebo dokument s deserializovaným objektem Stream a vrátí.

(Zděděno od XmlObjectSerializer)
ReadObject(XmlDictionaryReader, Boolean, DataContractResolver)

Přečte dokument XML nebo datový proud dokumentu a vrátí deserializovaný objekt. Metoda obsahuje parametr, který určuje, jestli je ověřený název objektu, a překladač pro mapování xsi:type deklarací za běhu.

ReadObject(XmlDictionaryReader, Boolean)

Načte datový proud XML s deserializovaným objektem XmlDictionaryReader a také určuje, zda je provedena kontrola ověření názvu objektu před přečtením jeho hodnoty.

ReadObject(XmlDictionaryReader)

Přečte dokument XML nebo datový proud s deserializovaným objektem XmlDictionaryReader a vrátí deserializovaný objekt.

(Zděděno od XmlObjectSerializer)
ReadObject(XmlReader, Boolean)

Načte datový proud XML s deserializovaným objektem XmlReader a také určuje, zda je provedena kontrola ověření názvu objektu před přečtením jeho hodnoty.

ReadObject(XmlReader)

Načte datový proud XML s deserializovaným objektem XmlReader a vrátí ho.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
WriteEndObject(XmlDictionaryWriter)

Zapíše zavírací element XML pomocí znaku XmlDictionaryWriter.

WriteEndObject(XmlWriter)

Zapíše zavírací element XML pomocí znaku XmlWriter.

WriteObject(Stream, Object)

Zapíše úplný obsah (začátek, obsah a konec) objektu do dokumentu XML nebo datového proudu se zadaným Stream.

(Zděděno od XmlObjectSerializer)
WriteObject(XmlDictionaryWriter, Object, DataContractResolver)

Zapíše všechna data objektu (spuštění elementu XML, obsahu a ohraničující element) do dokumentu XML nebo datového proudu pomocí zadaného XmlDictionaryWriter. Tato metoda obsahuje překladač pro mapování xsi:type deklarací za běhu.

WriteObject(XmlDictionaryWriter, Object)

Zapíše úplný obsah (začátek, obsah a konec) objektu do dokumentu XML nebo datového proudu se zadaným XmlDictionaryWriter.

(Zděděno od XmlObjectSerializer)
WriteObject(XmlWriter, Object)

Zapíše všechna data objektu (spuštění elementu XML, obsahu a uzavření elementu) do dokumentu XML nebo datového proudu pomocí XmlWriter.

WriteObjectContent(XmlDictionaryWriter, Object)

Zapíše obsah XML pomocí .XmlDictionaryWriter

WriteObjectContent(XmlWriter, Object)

Zapíše obsah XML pomocí .XmlWriter

WriteStartObject(XmlDictionaryWriter, Object)

Zapíše levý element XML pomocí znaku XmlDictionaryWriter.

WriteStartObject(XmlWriter, Object)

Zapíše levý element XML pomocí znaku XmlWriter.

Metody rozšíření

Name Description
GetSerializationSurrogateProvider(DataContractSerializer)

Vrátí náhradního zprostředkovatele serializace pro tento serializátor.

SetSerializationSurrogateProvider(DataContractSerializer, ISerializationSurrogateProvider)

Určuje náhradního zprostředkovatele serializace pro toto DataContractSerializer.

Platí pro

Bezpečný přístup z více vláken

Instance této třídy jsou bezpečné pro vlákna s výjimkou případů, kdy je instance použita s implementací IDataContractSurrogate nebo DataContractResolver.

Viz také