#157 - Serializzare e deserializzare in JSON con DataContractJsonSerializer

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

Per inserire un commento, devi avere un account.

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

Segnala su:  Facebook  Messenger  Twitter        |

Approfondimenti