Nonostante il .Net Framework sia in continua evoluzione, può sicuramente capitarci di dover lavorare con una versione che non sia proprio l’ultima, il cliente richiede particolari specifiche che viaggiano in concomitanza con l’evolversi del web 2.0 ed allo stesso tempo ci impone delle restrizioni, a quel punto il nostro compito non è solo quello di sviluppare il progetto ma, prima ancora, scegliere le specifiche con cui realizzarlo, le tecnologie a supporto di cui si può usufruire realizzando cosi la nostra cassetta degli strumenti personalizzata.

Un esempio pratico può essere Ajax, questa tecnologia riscuote successo da pochi anni a questa parte (soprattutto da quando c’è stato l’avvento del Web 2.0) e prendendo ad esempio il .Net Framework 2.0 possiamo facilmente capire che a quel tempo, l’idea che questa tecnologia potesse avere successo non era stata prevista data la totale mancanza di strumenti di supporto per gestirla (problema totalmente risolto a partire dalle versioni successive del framework). In questo senso ci vengono in aiuto librerie esterne che possono agevolarci di molto il lavoro che dobbiamo fare.

Oggi vi parlo di Json.NET – James Newton-King, un prodotto validissimo per l’elaborazione di dati lato Server in formato JSON, sono arrivato a tale soluzione partendo dalle mie necessità principali, cioè la completa compatibilità con il .Net Framework 2.0, la possibilità di mappare oggetti molto facilmente e soprattutto una buona documentazione (nessun prodotto è totalmente buono se non è accompagnato da una documentazione altrettanto soddisfacente!).

Dal sito ufficiale è possibile scaricare la libreria in base alla versione del Framework che si deve utilizzare, per il .Net 2.0 ho utilizzato Newtonsoft.Json.Net20.dll.

L’uso è molto semplice, basta referenziare la libreria all’interno del proprio progetto e tramite using è possibile richiamarla per poterne sfruttare le funzionalità. L’esigenza di utilizzare questa libreria è nata da un preciso problema, ho un oggetto molto complesso formato da diverse Proprietà pubbliche, di queste alcune sono calcolate, mentre altre sono dati veri e propri, il mio obiettivo è implementare una comunicazione Client (Web Browser) / Server di questo tipo:

JSON-SERVER-TO-CLIENT

In pratica voglio che un oggetto che sul server è mappato e contiene X proprietà, quando viene inviato al client come risposta JSON ad una richiesta AJAX, contenga un numero di proprietà diverso, numero che varia in base ai campi, dello stesso, che decidiamo di inviare. Nello schema si può notare come, tramite conversione, voglio che la Property 2 non arrivi nella risposta Ajax. Con la libreria Json.Net questa operazione diventa molto semplice! Prima di tutto dobbiamo creare il nostro OBJECT facendo attenzione alle specifiche di ogni proprietà:

using System; 
using Newtonsoft.Json;

namespace MyApplication.Data 
{ 
    public class MyObject
    {
    	  public int Property1; 
    	  [JsonIgnore]
    	  public int Property2; 
    	  public int Property3; 
    }
}

[ad#ad-lungo]

Il codice è molto chiaro, ho specificato un attributo per la Property2 che si chiama JsonIgnore e serve appunto per fare in modo che durante la conversione dei dati, questa proprietà non venga mappata. Comportamenti del genere sono molto frequenti se gli oggetti con cui abbiamo a che fare sono collegati tra di loro, analizziamo un oggetto più complesso per capire ancor meglio come intervenire:

JSON-SERVER-TO-CLIENT-2

In questo caso vogliamo fornire in Output le informazioni sull’utente, di questo i Ruoli non vogliamo che siano visualizzati per una particolare specifica.  Risulta utile mappare l’oggetto e specificare l’attributo perché se da un lato è semplice, dall’altro offre anche un codice auto-documentato in cui è facile intuire che si sono applicate determinate regole per una particolare esigenza. Supponendo di avere una Lista di ruoli all’interno del nostro oggetto utente, applicare la modifica risulterà molto semplice:

...
[JsonIgnore]
public List Ruoli 
{
    get { ... }
    set { ... }
}

In contesti ancor più ampi l’uso di tali pratiche durante la progettazione dei nostri oggetti risulta molto utile per un risultato finale di qualità, per esperienza diretta posso assicurarvi che quando la logica è davvero molto complessa ed i nostri oggetti espongono proprietà al cui interno si racchiudono particolari logiche che richiedono svariate risorse (es. Sql Server), sfruttare gli attributi in questo modo ci permette di ridurre drasticamente la stessa elaborazione dei dati e delle richieste.