#123 - Intercettare gli eventi del serializzatore WCF
di Cristian Civera, in Windows Communication Foundation, 22 maggio 2009
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); }
Approfondimenti
-
#113 - Implementare il pattern Dispose del .NET Framework
-
#128 - Caricare parzialmente un oggetto di dominio con Entity Framework
-
LINQ to Reflection - Parte tre
-
#147 - Gestire tutte le eccezioni in WPF
-
#131 - Disegnare linee in una scena 3D WPF
-
#998 - Effettuare chiamate ad un controller tramite AJAX in ASP.NET MVC
-
#121 - Utilizzare il KeyBinding di WPF con il pattern M-V-VM
-
Le novità di Windows 7 per gli sviluppatori
-
Visto che ultimamente Reflection.Emit è di moda...
-
#145 - Eseguire un servizio WCF con privilegi minimi
-
Template per generare classi POCO con Entity Framework 4.0

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.