Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
Ez a cikk kiegészítő megjegyzéseket tartalmaz az API referenciadokumentációjához.
DataContractSerializer Az osztály használatával szerializálhatja és deszerializálhatja a típuspéldányokat EGY XML-adatfolyamban vagy -dokumentumban. Létrehozhat például egy olyan típust, amely alapvető adatokat, például nevet és címet tartalmazó tulajdonságokkal rendelkezik Person . Ezután létrehozhat és módosíthat egy osztálypéldányt Person , és az összes tulajdonságértékét megírhatja egy XML-dokumentumban későbbi lekérés céljából, vagy egy XML-adatfolyamban azonnali átvitel céljából. A legfontosabb az, hogy a DataContractSerializer szerializálja és deszerializálja az adatok a Windows Communication Foundation (WCF) üzenetekben. Alkalmazza az attribútumot az DataContractAttribute osztályokra, az attribútumot pedig az DataMemberAttribute osztálytagokra a szerializált tulajdonságok és mezők megadásához.
A szerializálható típusok listáját az Adatszerződés szerializálója által támogatott típusok című témakörben találja.
A DataContractSerializerhasználatához először hozzon létre egy osztálypéldányt és egy, a formátum írásához vagy olvasásához megfelelő objektumot, például a XmlDictionaryWriter. Ezután hívja meg a metódust WriteObject az adatok megőrzéséhez. Az adatok lekéréséhez hozzon létre egy olyan objektumot, amely megfelel az adatformátum (például egy XmlDictionaryReader XML-dokumentum) olvasásának, és hívja meg a metódust ReadObject .
További információért a DataContractSerializer használatával kapcsolatban, lásd a szerializálást és deszerializálást.
Az adatszerződés szerializálójának típusát az ügyfélalkalmazás konfigurációs fájljának dataContractSerializer< elemével állíthatja be.>
Osztályok előkészítése szerializálási vagy deszerializálási célokra
A DataContractSerializer a DataContractAttribute és DataMemberAttribute osztályokkal együtt van használva. Az osztály szerializálásra való előkészítéséhez alkalmazza az DataContractAttribute az osztályra. A szerializálni kívánt adatokat visszaadó osztály minden egyes tagjára alkalmazza a DataMemberAttribute. A mezőket és tulajdonságokat hozzáférhetőségtől függetlenül szerializálhatja: privát, védett, belső, védett belső vagy nyilvános.
Mivel például a sémája egy Customer tulajdonságú ID-t határoz meg, de már rendelkezik egy meglévő alkalmazással, amely egy Person tulajdonságú Name típust használ. A szerződésnek megfelelő típus létrehozásához először alkalmazza az DataContractAttribute osztályra. Ezután alkalmazza az DataMemberAttribute összes szerializálni kívánt mezőre vagy tulajdonságra.
Megjegyzés:
A magán- és a nyilvános tagokra is alkalmazhatja a DataMemberAttribute elemet.
Az XML végső formátumának nem kell szövegnek lennie. Ehelyett az DataContractSerializer adatok XML-adatkészletként vannak megírva, amely lehetővé teszi, hogy az adatokat bármilyen, az XmlReader és XmlWriteráltal felismert formátumba írja. Javasolt az XmlDictionaryReader és XmlDictionaryWriter osztályokat használni olvasásra és írásra, mert mindkettő optimalizálva van a DataContractSerializer-vel való együttműködésre.
Ha olyan osztályt hoz létre, amely olyan mezőkkel vagy tulajdonságokkal rendelkezik, amelyeket a szerializálás vagy deszerializálás előtt fel kell tölteni, használjon visszahívási attribútumokatVersion-Tolerant Szerializálási visszahívások című cikkben leírtak szerint.
Hozzáadás az ismert típusok gyűjteményéhez
Amikor egy objektum szerializálását vagy deszerializálását végezzük, a típusnak "ismertnek" kell lennie a DataContractSerializer számára. Először hozzon létre egy olyan osztálypéldányt, amely implementálja IEnumerable<T> (például List<T>) és hozzáadja az ismert típusokat a gyűjteményhez. Ezután hozzon létre egy példányt a DataContractSerializer egyik túlterhelési módjának használatával, amely tartalmazza a IEnumerable<T>-t (például DataContractSerializer(Type, IEnumerable<Type>)).
Megjegyzés:
A többi primitív típustól eltérően a DateTimeOffset struktúra alapértelmezés szerint nem ismert típus, ezért manuálisan kell hozzáadni az ismert típusok listájához (lásd : Adatszerződés ismert típusai).
Előre kompatibilitás
A DataContractSerializer érti az adatszerződéseket, amelyeket úgy terveztek, hogy kompatibilisek legyenek a szerződés jövőbeli verzióival. Az ilyen típusok implementálják az interfészt IExtensibleDataObject . Az interfész az ExtensionData objektumot visszaadó tulajdonságot ExtensionDataObject tartalmazza. További információ: Forward-Compatible Adatszerződések.
Futtatás részleges megbízhatósági kapcsolat alatt
Ha a célobjektum példányosítása a deszerializálás során történik, a DataContractSerializer rendszer nem hívja meg a célobjektum konstruktorát. Ha olyan [DataContract] típust hoz létre, amely részleges megbízhatósági kapcsolatból érhető el (vagyis nyilvános, és olyan szerelvényben van, amely alkalmazza az AllowPartiallyTrustedCallers attribútumot), és amely bizonyos biztonsággal kapcsolatos műveleteket hajt végre, tisztában kell lennie azzal, hogy a konstruktor nem hívható meg. Különösen a következő technikák nem működnek:
- Ha a részleges megbízhatósági hozzáférést úgy próbálja korlátozni, hogy a konstruktort belsővé vagy priváttá teszi, vagy
LinkDemandcímkét ad a konstruktorhoz, egyik lehetőségnek sincs hatása a részleges megbízhatóság alatti deszerializálás során. - Ha azt az osztályt kódolja, amely feltételezi, hogy a konstruktor lefutott, előfordulhat, hogy az osztály érvénytelen belső állapotba kerül, amely kihasználható.