Intercettare gli eventi del serializzatore WCF

di Cristian Civera, in Windows Communication Foundation,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi