Formatting: JsonConvert.SerializeObject None o Indented?

Esportare in formato JSON tramite Newtonsoft non è per nulla difficile, ma la parte interessante è stata la lettura via rete del file prodotto viste le dimensioni. Come ho risolto questo problema? Tramite il cambio del Formatting ho generato due file. Il primo -per l’app produttiva- in formato “.min.” ed uno esploso per la fase di sviluppo in modo da potere controllare i dati esportati.

Newtonsoft.Json: Come installarlo

Per prima cosa -se non lo avete già fatto- dovete installare Newtonsoft.Json all’interno del vostro progetto e per farlo vi basterà lanciare il seguente comando dal Package Manager

Install-Package Newtonsoft.Json -Version 12.0.1

Attenzione: La versione 12.0.1 è quella più recente presente sulla pagina del pacchetto Newtonsoft.Json (nuget.org) però per una serie di compatibilità con altri pacchetti presenti nel mio csproj ho dovuto mettere la 11.0.2

Formatting: Chi sei e come funzioni?

Per farlo ho scritto un metodo che accetta in ingresso due valori:

  • List dynamics: tutti gli oggetti su cui effettuare JsonConvert.SerializeObject
  • bool debugMode: se true il file avrà Formatting.Indented, altrimenti Formatting.None. Newtonsoft.Json.Formatting (cs)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19

public string DynamicListToJson(List<dynamic> dynamics, bool debugMode)
        {

            Formatting formattingMode = Formatting.None;

            if(debugMode){
                formattingMode = Formatting.Indented;
            }

            string json = JsonConvert.SerializeObject(
                dynamics,
                formattingMode
            );

            return json;

        }

Ora, vediamo la parte pratica che chiama il codice appena scritto e come sfruttarla. Formatting - debug mode On (cs)

1
2
3
4

string toFile = DynamicListToJson(_values,true);
File.WriteAllText("test.json", toFile);

Formatting - debug mode Off (cs)

1
2
3
4

toFile = DynamicListToJson(_values, false);
File.WriteAllText(@"test.min.json", toFile);

Nel mio caso il risparmio di spazio è stato notevole e si trattava di circa il 30% dello spazio. Questo implica una riduzione notevole di tempo nello spostamento e lettura via rete.

Formatting Tips:

Per semplificare il tutto il valore della variabile debugMode lo vado a prendere da una configurazione nel file host.json (o local.settings.json) in modo da non dovermi preoccupare di mandare in produzione la variabile sbagliata.