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.
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 typů datových 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 s konstruktorem bez parametrů.
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, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Boolean, Char, Decimal, Object a String.
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, TimeSpan, Guid, 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 rozhraní .NET Framework pro vzdálenou komunikaci, BinaryFormatter, a SoapFormatter, včetně podpory 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, jsou vyžadována oprávnění SerializationFormatter a UnmanagedCode.
Při spuštění kódu WCF v režimu částečné důvěryhodnosti není serializace a deserializace
readonlypolí (apublicprivate) 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 deserializacereadonlypolí 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, vyvolají výjimku v částečně důvěryhodném prostředí, protože metoda GetRealObject vyžaduje oprávnění zabezpečení
[SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)].
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 buď jako Object nebo, v případě rozhraní kolekce, jako typy kolekcí.
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 typ singleton a při deserializaci deserializátor respektuje omezení singletonu a odkazuje všechny
DBNullodkazy na instanci singleton. ProtožeDBNullje serializovatelný typ, vyžaduje SerializationFormatter oprávnění.