Windows Communication Foundation è un framework per lo sviluppo di servizi che sfrutta la classe DataContractSerializer per serializzare e deserializzare i messaggi che questi si scambiano. Indipendentemente dal formato XML, binario o MTOM, sono disponibili attributi per indicare quali membri serializzare e quali no. E' possibile inoltre monitorare e intercettare gli eventi di serializzazione che coinvolgono una classe attraverso gli attributi OnSerializingAttribute, OnSerializedAttribute, OnDeserializingAttribute e OnDeserializedAttribute del namespace System.Runtime.Serialization.
L'uso è piuttosto semplice: basta definire un metodo che accetti uno StreamingContext e marcarlo con l'attributo dell'evento desiderato.
L'esempio seguente intercetta la serializzazione per non restituire il valore di una proprietà. Questa tecnica è sfruttata dalle entità di WCF per poter essere serializzate.
public class Product { public int ID { get; set; } public string Description { get; set; } private bool serializing; public IEnumerable<Order> Orders { get { // Se sta serializzando non restituisco niente if (serializing) return null; return GetOrders(); } } [OnSerializing] private void OnSerializing(StreamingContext context) { serializing = true; } [OnSerialized] private void OnSerialized(StreamingContext context) { serializing = false; } }
Il test può essere fatto serializzando una semplice classe:
Product p = new Product { ID = 1, Description = "Test", }; DataContractSerializer serializer = new DataContractSerializer(p.GetType()); using (XmlWriter writer = XmlDictionaryWriter.Create(Console.Out)) { serializer.WriteObject(writer, p); }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.