Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
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.
Poznámka:
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>)).
Poznámka:
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.
Spuštění v režimu částečné důvěryhodnosti
Při vytváření instance cílového objektu během deserializace DataContractSerializer nevolá konstruktor cílového objektu. Pokud vytváříte typ [DataContract], který je přístupný z částečné důvěryhodnosti (to znamená, že je veřejný a v sestavení, kde je použit atribut AllowPartiallyTrustedCallers) a který provádí některé akce související se zabezpečením, musíte mít na paměti, že konstruktor není volán. Zejména následující techniky nefungují:
- Pokud se pokusíte omezit přístup s částečnou důvěryhodností vytvořením interního nebo privátního konstruktoru, nebo přidáním
LinkDemandke konstruktoru – ani jedna z těchto možností nemá žádný vliv při deserializaci v rámci částečné důvěryhodnosti. - Pokud napíšete kód třídy, která předpokládá, že konstruktor byl spuštěn, třída se může dostat do neplatného interního stavu, který je zneužitelný.