Typy podporované serializátorem kontraktu dat
Windows Communication Foundation (WCF) používá DataContractSerializer jako svůj výchozí serializační modul k převodu dat do XML a k převodu XML zpět na data. Je DataContractSerializer navržen pro serializaci datových typů kontraktů . Podporuje však mnoho dalších typů, které lze považovat za implicitní kontrakt dat. Následuje úplný seznam typů, které lze serializovat:
Všechny veřejně viditelné typy, které mají konstruktor, který nemá parametry.
Typy kontraktů dat Jedná se o typy, na které DataContractAttribute byl atribut použit. Nové vlastní typy, které představují obchodní objekty, by se normálně měly vytvářet jako typy kontraktů dat. Další informace naleznete v tématu Použití kontraktů dat a serializovatelných typů.
Typy kolekcí. Jedná se o typy, které představují seznamy dat. Mohou to být běžná pole typů nebo typy kolekcí, například ArrayList a Dictionary<TKey,TValue>. Atribut CollectionDataContractAttribute lze použít k přizpůsobení serializace těchto typů, ale není vyžadován. Další informace naleznete v tématu Typy kolekcí v kontraktech dat.
Typy výčtu Výčty, včetně výčtů příznaků, jsou serializovatelné. Volitelně lze typy výčtu označit atributem DataContractAttribute , v takovém případě musí být každý člen, který se účastní serializace, označen atributem EnumMemberAttribute . Členy, které nejsou označené, nejsou serializovány. Další informace naleznete v tématu Výčtové typy v kontraktech dat.
Primitivní typy rozhraní .NET Framework Všechny následující typy integrované do rozhraní .NET Framework lze serializovat a jsou považovány za primitivní typy: Byte, , , Int16, Int32, SingleUInt16UInt64Int64UInt32BooleanDouble, Char, DecimalObjecta String. . SByte
Jiné primitivní typy. Tyto typy nejsou primitivy v rozhraní .NET Framework, ale jsou považovány za primitivy v serializovaném formátu XML. Tyto typy jsou DateTime, , DateTimeOffset, GuidTimeSpan, Uri, XmlQualifiedName, a pole .Byte
Poznámka:
Na rozdíl od jiných primitivních typů DateTimeOffset není ve výchozím nastavení známým typem. Další informace naleznete v tématu Známé typy kontraktů dat).
Typy označené atributem SerializableAttribute Mnoho typů zahrnutých v knihovně základních tříd rozhraní .NET Framework spadá do této kategorie. Plně DataContractSerializer podporuje tento programovací model serializace, který byl používán vzdálené komunikace rozhraní .NET Framework, BinaryFormattera , včetně SoapFormatterpodpory rozhraní ISerializable .
Typy představující nezpracované XML nebo typy, které představují ADO.NET relační data. Typy XmlElement a pole XmlNode jsou podporovány jako způsob, jak přímo reprezentovat XML. Kromě toho se podporují typy, které implementují IXmlSerializable rozhraní, včetně souvisejících XmlSchemaProviderAttribute atributů a typůXDocument.XElement ADO.NETDataTable typ a DataSet typ (stejně jako jeho typ odvozené třídy) všechny implementují IXmlSerializable rozhraní, a proto se vejdou do této kategorie. Další informace naleznete v tématu XML a ADO.NET typy v kontraktech dat.
Omezení používání určitých typů v režimu částečné důvěryhodnosti
Následuje seznam omezení při použití určitých typů ve scénářích režimu částečné důvěryhodnosti:
Chcete-li serializovat nebo deserializovat typ, který implementuje ISerializable v částečně důvěryhodném kódu pomocí DataContractSerializer požadavků SerializationFormatter a UnmanagedCode oprávnění.
Při spuštění kódu WCF v režimu částečné důvěryhodnosti není serializace a deserializace
readonly
polí (apublic
private
) podporována. Důvodem je to, že vygenerovaná il je neověřitelná a proto vyžaduje zvýšená oprávnění.Obě DataContractSerializer možnosti jsou XmlSerializer podporovány v prostředí s částečnou důvěryhodností. Použití je DataContractSerializer však podmíněno následujícími podmínkami:
Všechny serializovatelné
[DataContract]
typy musí být veřejné.Všechna serializovatelná
[DataMember]
pole nebo vlastnosti typu[DataContract]
musí být veřejná a pro čtení a zápis. Serializace a deserializacereadonly
polí není podporována při spuštění WCF v částečně důvěryhodné aplikaci.[Serializable]
/ISerializable]
Programovací model není podporován v prostředí částečné důvěryhodnosti.Známé typy musí být zadány v konfiguraci na úrovni kódu nebo počítače (
Machine.config
). Známé typy nelze zadat v konfiguraci na úrovni aplikace z bezpečnostních důvodů.
Typy, které implementují IObjectReference výjimku v částečně důvěryhodném prostředí, protože GetRealObject metoda vyžaduje oprávnění
[SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]
zabezpečení .
Další poznámky k serializaci
Následující pravidla platí také pro typy podporované serializátorem kontraktů dat:
Generické typy jsou plně podporovány serializátorem kontraktů dat.
Typy hodnot s možnou hodnotou null jsou plně podporovány serializátorem datového kontraktu.
Typy rozhraní jsou považovány za Object typy kolekcí nebo v případě rozhraní kolekce.
Podporují se struktury i třídy.
Nepodporuje DataContractSerializer programovací model používaný webovými službami XmlSerializer a ASP.NET. Zejména nepodporuje atributy jako XmlElementAttribute a XmlAttributeAttribute. Chcete-li povolit podporu pro tento programovací model, wcf musí být přepnut, aby používal XmlSerializer místo DataContractSerializer.
Typ DBNull se zpracovává zvláštním způsobem. Jedná se o jeden typ a při deserializaci deserializátor respektuje jednotonové omezení a odkazuje všechny
DBNull
odkazy na instanci singleton. ProtožeDBNull
je serializovatelný typ, vyžaduje SerializationFormatter oprávnění.