Types Supported by the Data Contract Serializer

Windows Communication Foundation usa DataContractSerializer come motore di serializzazione predefinito per convertire i dati in XML e convertire di nuovo XML in dati. DataContractSerializer è progettato per serializzare tipi di contratto dati . Supporta tuttavia molti altri tipi che possono essere considerati come tipi dotati di un contratto dati implicito. Nell'elenco seguente sono riportati tutti i tipi serializzabili:

Limitazioni dell'utilizzo di certi tipi in modalità parzialmente attendibile

Nell'elenco seguente sono riportate le limitazioni relative all'utilizzo di determinati tipi in scenari in modalità parzialmente attendibile:

  • Per serializzare o deserializzare un tipo che implementa ISerializable in codice parzialmente attendibile tramite DataContractSerializer è necessario disporre delle autorizzazioni SerializationFormatter e UnmanagedCode .

  • Quando si esegue codice WCF in modalità Partial Trust, la serializzazione e la deserializzazione dei campi readonly (public e private) non sono supportate. Ciò è dovuto al fatto che IL generato non è verificabile e pertanto richiede autorizzazioni elevate.

  • Entrambe le classi DataContractSerializer e XmlSerializer sono supportate in un ambiente di trust parziale. Tuttavia, l'utilizzo di DataContractSerializer è soggetto alle condizioni seguenti:

    • Tutti i tipi [DataContract] serializzabili devono essere pubblici.

    • Tutti i campi [DataMember] o le proprietà in un tipo [DataContract] devono essere pubblici e di lettura/scrittura. La serializzazione e la deserializzazione di campi readonly non sono supportate quando WCF viene eseguito in un'applicazione parzialmente attendibile.

    • L'attributo [Serializable]/ISerializable] non è supportato in un ambiente parzialmente attendibile.

    • I tipi noti devono essere specificati nel codice o nella configurazione a livello di computer (Machine.config). I tipi noti non possono essere specificati nella configurazione a livello di applicazione per motivi di sicurezza.

  • I tipi che implementano IObjectReference generano un'eccezione in un ambiente parzialmente attendibile, poiché il metodo GetRealObject richiede l'autorizzazione di sicurezza [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)].

Note aggiuntive sulla serializzazione

Le regole seguenti si applicano anche ai tipi supportati dal serializzatore di contratti dati:

  • I tipi generici sono totalmente supportati dal serializzatore dei contratti dati

  • I tipi di valori nullable sono totalmente supportati dal serializzatore dei contratti dati.

  • I tipi di interfaccia vengono trattati come Object o, nel caso di interfacce di raccolta, come tipi di raccolta.

  • Sono supportate sia le strutture che le classi.

  • DataContractSerializer non supporta il modello di programmazione usato dai servizi Web XmlSerializer e ASP.NET. In particolare, non supporta attributi quali XmlElementAttribute e XmlAttributeAttribute. Per abilitare il supporto per questo modello di programmazione, è necessario passare a WCF per usare XmlSerializer anziché DataContractSerializer.

  • Il tipo DBNull viene trattato in modo speciale. È un tipo singleton e sulla deserializzazione il deserializzatore rispetta il vincolo singleton e punta tutti i riferimenti DBNull all'istanza singleton. Dato che DBNull è un tipo serializzabile, richiede l'autorizzazione SerializationFormatter .

Vedi anche