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
eset
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
oset
e quelle con metodiset
oget
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.