Sdílet prostřednictvím


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 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:

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 readonly polí (a publicprivate) 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 deserializace readonly 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, 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 DBNull odkazy na instanci singleton. Protože DBNull je serializovatelný typ, vyžaduje SerializationFormatter oprávnění.

Viz také