Az adatszerződés szerializálója által támogatott típusok
A Windows Communication Foundation (WCF) az alapértelmezett szerializálási motort használja az DataContractSerializer adatok XML-fájllá alakításához és az XML adatokká alakításához. Az DataContractSerializer adatszerződések típusainak szerializálására szolgál. Azonban számos más típust támogat, amelyek implicit adatszerződésnek tekinthetők. A szerializálható típusok teljes listája a következő:
Minden olyan nyilvánosan látható típus, amely rendelkezik olyan konstruktorsal, amely nem rendelkezik paraméterekkel.
Adatszerződések típusai. Ezek azok a típusok, amelyekre az DataContractAttribute attribútumot alkalmazták. Az üzleti objektumokat képviselő új egyéni típusokat általában adatszerződés-típusokként kell létrehozni. További információ: Adatszerződések és szerializálható típusok használata.
Gyűjteménytípusok. Ezek olyan típusok, amelyek adatlistákat jelölnek. Ezek lehetnek normál típusú tömbök, vagy gyűjteménytípusok, például ArrayList és Dictionary<TKey,TValue>. Az CollectionDataContractAttribute attribútum ezen típusok szerializálásának testreszabására használható, de nem szükséges. További információ: Adatgyűjtési típusok az adatszerződésekben.
Számbavételi típusok. Az enumerálások, beleértve a jelzőszámozásokat is, szerializálhatók. Opcionálisan az enumerálási típusok megjelölhetők az DataContractAttribute attribútummal, ebben az esetben a szerializálásban részt vevő összes tagot meg kell jelölni az EnumMemberAttribute attribútummal. A nem megjelölt tagok nincsenek szerializálva. További információ: Enumerálási típusok az adatszerződésekben.
.NET-keretrendszer primitív típusokat. A .NET-keretrendszer beépített alábbi típusok szerializálhatók, és primitív típusoknak tekinthetők: Byte, SByte, Int16, Int64UInt64UInt32SingleDoubleUInt16Int32CharDecimalBooleanObjectés .String
Egyéb primitív típusok. Ezek a típusok nem primitívek a .NET-keretrendszer, de a szerializált XML-formában primitívekként kezelik őket. Ezek a típusok a DateTimekövetkezők: , DateTimeOffsetTimeSpan, Guid, , Uri, XmlQualifiedNameés tömbök .Byte
Feljegyzés
A többi primitív típustól DateTimeOffset eltérően alapértelmezés szerint nem ismert típus. További információ: Adatszerződés ismert típusai).
Az attribútummal SerializableAttribute megjelölt típusok. Az .NET-keretrendszer alaposztálytár számos típusa ebbe a kategóriába tartozik. A DataContractSerializer teljes mértékben támogatja ezt a szerializálási programozási modellt, amelyet .NET-keretrendszer újraírás, a BinaryFormatter, és a SoapFormatter, beleértve a ISerializable felület támogatását is.
Nyers XML-t vagy ADO.NET relációs adatokat képviselő típusok. A XmlElement típusok és a XmlNode tömbök támogatottak az XML közvetlen ábrázolásának módjaként. Emellett az IXmlSerializable interfészt megvalósító típusok is támogatottak, beleértve a kapcsolódó XmlSchemaProviderAttribute attribútumot, valamint a XDocument típusokat.XElement A ADO.NETDataTable típus és a DataSet típus (valamint a típusból származtatott osztályok) mind implementálják az interfészt, ezért illeszkednek ebbe a IXmlSerializable kategóriába. További információ: XML és ADO.NET Adatszerződések típusai.
Bizonyos típusok részleges megbízhatósági módban való használatának korlátozásai
Az alábbiakban felsoroljuk azokat a korlátozásokat, amelyek bizonyos típusokat részleges megbízhatósági módban használnak:
Olyan típus szerializálásához vagy deszerializálásához, amely részben megbízható kódban implementál ISerializable a DataContractSerializer szükséges SerializationFormatter és UnmanagedCode engedélyekkel.
A WCF-kód részleges megbízhatósági módban történő futtatásakor a mezők szerializálása és deszerializálása
readonly
(mindkettőpublic
ésprivate
) nem támogatott. Ennek az az oka, hogy a létrehozott IL ellenőrizhetetlen, ezért emelt szintű engedélyeket igényel.Mind a DataContractSerializerXmlSerializer kettő támogatott részleges megbízhatósági környezetben. A használatukra DataContractSerializer azonban a következő feltételek vonatkoznak:
Minden szerializálható
[DataContract]
típusnak nyilvánosnak kell lennie.Egy típus összes szerializálható
[DataMember]
mezőjének vagy tulajdonságának[DataContract]
nyilvánosnak és olvashatónak/írhatónak kell lennie. A mezők szerializálása és deszerializálásareadonly
nem támogatott a WCF részben megbízható alkalmazásokban való futtatásakor.A
[Serializable]
/ISerializable]
programozási modell részleges megbízhatósági környezetben nem támogatott.Az ismert típusokat kód- vagy gépszintű konfigurációban (
Machine.config
) kell megadni. Az ismert típusok biztonsági okokból nem adhatók meg az alkalmazásszintű konfigurációban.
A implementáló IObjectReference típusok kivételt képeznek egy részben megbízható környezetben, mert a GetRealObject metódushoz biztonsági engedély
[SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]
szükséges.
További megjegyzések a szerializálásról
Az adatszerződés szerializálója által támogatott típusokra a következő szabályok vonatkoznak:
Az adatszerződés szerializálója teljes mértékben támogatja az általános típusokat.
Az adatszerződés szerializálója teljes mértékben támogatja a null értékű értéktípusokat.
A rendszer a felülettípusokat gyűjteménytípusként Object vagy gyűjteménytípusként kezeli a gyűjtőfelületek esetében.
Mind a struktúrák, mind az osztályok támogatottak.
Ez DataContractSerializer nem támogatja a webszolgáltatások és ASP.NET XmlSerializer által használt programozási modellt. Különösen nem támogatja az olyan attribútumokat, mint XmlElementAttribute és XmlAttributeAttribute. A programozási modell támogatásának engedélyezéséhez a WCF-et ahelyett, hogy a XmlSerializerDataContractSerializer.
A DBNull típus kezelése speciális módon történik. Ez egy egytonos típus, és a deszerializáláskor a deszerializáló tiszteletben tartja az egytonos kényszert, és az összes
DBNull
hivatkozásra az egytonos példányra mutat. MivelDBNull
szerializálható típus, engedélyre van szükség SerializationFormatter .