Con la versione 3.0 del .NET Framework è stato introdotto un nuovo motore di serializzazione rappresentato dalla classe DataContractSerializer (namespace System.Runtime.Serialization) più completo e sfruttato da Windows Communication Foundation per trasformare in XML le classi per la realizzazione di servizi.
Rispetto a XmlSerializer e la runtime serialization, presente dalla versione 1.0, questo nuovo motore contiene tutto ciò che hanno di buono gli altri due, consentendo di serializzare per valore o con riferimenti, campi o proprietà anche privati, specificando inoltre namespace e nome degli elementi, in XML, binario o altre codifiche. Tutto ciò che si deve fare per usufruirne è marcare con l'attributo DataContract la classe che si intende rendere serializzabile e con DataMember i membri che si vogliono includere.
Con il Service Pack 1, però, questo non è obbligatorio poiché tutte le classi si possono implicitamente serializzare. Infatti, in mancanza dell'attributo il motore serializza tutti i membri pubblici validi ad eccezione degli eventi, anche se questo non vuol dire che una classe una volta deserializzata funzioni correttamente, poiché l'autore di essa potrebbe non aver previsto tale possibilità.
Qualora invece la classe sia marcata con l'attributo DataContract, il motore serializza solo i membri aventi l'attributo DataMember.
Di seguito un semplice esempio di serializzazione in modo implicito di una classe.
class Program { static void Main(string[] args) { DataContractSerializer dc = new DataContractSerializer(typeof(Product)); Product p = new Product { Id = 3, Name = "test" }; using (XmlWriter writer = XmlWriter.Create(Console.Out)) { dc.WriteObject(writer, p); } } } public class Product { public int Id { get; set; } public string Name { get; set; } }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.