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.


