Serializzare e deserializzare in JSON con DataContractJsonSerializer

di Cristian Civera, in Windows Communication Foundation,

Il web 2.0 ha portato alla ribalta tecnologie presenti ormai da molti anni, ma che non hanno mai trovato un impiego così massiccio come invece è avvenuto negli ultimi tempi. Tra queste rientra senza dubbio JSON (JavaScript Object Notation) le cui origini provengono da Javascript per la dichiarazione di oggetti, ma è diventato indipendente e utilizzato per lo scambio di informazioni, in formato testuale tra client e server.

In AJAX questo strumento viene ampiamente utilizzato e spesso occorre quindi produrre delle stringhe JSON per restituirle al client. Il motore di serializzazione introdotto insieme a WCF è già in grado, fin dalla versione 3.0, di convertire oggetti in XML o in binario, ma con la versione 3.5 sp1 è stato introdotto per questo scopo la classe DataContractJsonSerializer che, basandosi sullo stesso sistema di identificazione di proprietà e campi, permette di produrre JSON.

Ecco quindi un semplice utilizzo di questa classe per serializzare la classe Product:

class Program
{
  static void Main(string[] args)
  {
    // Creo l'entità da serializzare
    Product p = new Product
    {
       ID = 1,
       Name = "test",
    };

    using (MemoryStream stream = new MemoryStream())
    {
      // Serializzatore JSON
      DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Product));
      serializer.WriteObject(stream, p);

      stream.Position = 0;

      // Converto lo stream in stringa
      string json = Encoding.Default.GetString(stream.GetBuffer());
      Console.WriteLine(json);
    }
  }
}

[DataContract()]
public class Product
{
    public int ID { get; set; }

    [DataMember()]
    public string Name { get; set; }
}

Eseguendo il codice ciò che si ottiene è {"Name":"test"}. Come per il normale serializzatore DataContractSerializer, anche per JSON è possibile utilizzare gli attributi DataContract e DataMember per indicare quali classi e proprietà serializzare (se omesso tutti i membri pubblici sono serializzabili).

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

I più letti di oggi