2013-06-04 23 views
85

Ciao Ho bisogno di scrivere i seguenti dati in un file di testo usando il formato Json in C#? STAFFE sono importanti per essere valido formato JSONCome scrivere un file Json in C#?

[ 
    { 
    "Id": 1, 
    "SSN": 123, 
    "Message": "whatever" 

    }, 
    { 
    "Id": 2, 
    "SSN": 125, 
    "Message": "whatever" 
    } 
] 

Ed ecco la mia classe del modello

public class data 
{ 
    public int Id { get; set; } 
    public int SSN { get; set; } 
    public string Message {get; set;} 

} 

risposta

148

Suggerirei Json.Net, vedi esempio qui sotto:

List<data> _data = new List<data>(); 
_data.Add(new data() 
{ 
    Id = 1, 
    SSN = 2, 
    Message = "A Message" 
}); 

string json = JsonConvert.SerializeObject(_data.ToArray()); 

//write string to file 
System.IO.File.WriteAllText(@"D:\path.txt", json); 

o la versione leggermente più efficiente del codice precedente (non utilizza una stringa come buffer):

//open file stream 
using (StreamWriter file = File.CreateText(@"D:\path.txt")) 
{ 
    JsonSerializer serializer = new JsonSerializer(); 
    //serialize object directly into file stream 
    serializer.Serialize(file, _data); 
} 

Documentazione: Serialize JSON to a file


Perché? Ecco uno feature comparision between common serialisers as well as benchmark tests † ‡.

Di seguito è riportato un grafico della performance tratta dal articolo collegato:

enter image description here

Questo seperate post, afferma che:

Json.NET è sempre stato efficiente della memoria, lo streaming e la lettura scrivere documenti di grandi dimensioni piuttosto che caricarli interamente in memoria, ma sono riuscito a trovare un paio di punti chiave in cui le allocazioni oggetto potrebbero essere ridotte ...... (ora) Json.Net (6.0) alloca 8 volte meno memoria JavaScriptSerializer

‡.

† benchmark sembrano essere Json.Net 5, la versione corrente (in scrittura) è 10. Quale versione di serializzatori Net standard utilizzati non menzionato

‡ Queste prove sono ovviamente dagli sviluppatori che mantengono la biblioteca. Non ho verificato le loro affermazioni. In caso di dubbio, provali tu stesso.

+1

Come funziona JSON.NET differisce dal supporto integrato fornito dalle classi 'JavaScriptSerializer' e' DataContractJsonSerializer'? –

+0

@RobertHarvey Trovo più facile da usare e più robusto. Credo che Microsoft sia d'accordo nel ritenere che stiano progettando di implementarlo nel sistema centrale. Credo anche che sia molto più veloce. Ho visto alcune statistiche da qualche parte per sostenere questo, ma non li ho in mano al momento. – Liam

+0

e implementa meglio le date, http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx – Liam

37

L'esempio nella risposta di Liam salva il file come stringa in una sola riga. Preferisco aggiungere la formattazione. Qualcuno in futuro potrebbe voler modificare manualmente alcuni valori nel file. Se aggiungi la formattazione è più facile farlo.

Di seguito aggiunge indentazione base JSON:

string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented); 
2
var responseData = //Fetch Data 
string jsonData = JsonConvert.SerializeObject(responseData, Formatting.None); 
System.IO.File.WriteAllText(Server.MapPath("~/JsonData/jsondata.txt"), jsonData);