Tipi serializzabili

Per impostazione predefinita, DataContractSerializer serializza tutti i tipi visibili pubblicamente. Vengono serializzati i campi e le proprietà di lettura/scrittura pubblici del tipo.

È possibile modificare il comportamento predefinito applicando gli attributi DataContractAttribute e DataMemberAttribute ai tipi e ai membri. Questa funzionalità può essere utile quando sono presenti tipi non controllati dall'utente e non modificabili per aggiungere attributi. DataContractSerializer riconosce tali tipi non contrassegnati.

Impostazioni predefinite di serializzazione

È possibile applicare gli attributi DataContractAttribute e DataMemberAttribute per controllare in modo esplicito o personalizzare la serializzazione di tipi e membri. È inoltre possibile applicare tali attributi ai campi privati. Tuttavia, anche i tipi non contrassegnati con questi attributi vengono serializzati e deserializzati. Vengono applicate le regole e le eccezioni seguenti:

  • Tramite DataContractSerializer viene dedotto un contratto dati dai tipi senza attributi usando le proprietà predefinite dei tipi appena creati.

  • Vengono serializzati tutti i campi e le proprietà pubblici con metodi get e set pubblici, a meno che non venga applicato l'attributo IgnoreDataMemberAttribute a tale membro.

  • La semantica di serializzazione è simile a quella di XmlSerializer.

  • Nei tipi non contrassegnati vengono serializzati solo i tipi pubblici con costruttori privi di parametri. L'eccezione a questa regola è ExtensionDataObject usato con l'interfaccia IExtensibleDataObject.

  • I campi di sola lettura, le proprietà senza un metodo get o set e quelle con metodi set o get interni o privati non vengono serializzati. Tali proprietà vengono ignorate e non viene generata alcuna eccezione, salvo nel caso di raccolte con sola funzione di accesso get.

  • Gli attributi XmlSerializer (ad esempio XmlElement, XmlAttribute, XmlIgnore, XmlInclude e così via) vengono ignorati.

  • Se non si applica l'attributo DataContractAttribute a un tipo specificato, il serializzatore ignora qualsiasi membro del tipo a cui viene applicato l'attributo DataMemberAttribute.

  • La proprietà KnownTypes è supportata nei tipi non contrassegnati con l'attributo DataContractAttribute. È compreso il supporto per l'attributo KnownTypeAttribute nei tipi non contrassegnati.

  • Per rifiutare esplicitamente il processo di serializzazione per membri, proprietà o campi pubblici, applicare l'attributo IgnoreDataMemberAttribute a tale membro.

Ereditarietà

I tipi non contrassegnati (tipi senza l'attributo DataContractAttribute) possono ereditare da tipi che dispongono di tale attributo, ma l'operazione opposta non è consentita, pertanto i tipi con l'attributo non possono ereditare da tipi non contrassegnati. Questa regola viene applicata principalmente per garantire la compatibilità con il codice scritto in versioni precedenti di .NET Framework.

Vedi anche