Consiglierei Json.Net , vedi esempio 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 sopra (non usa 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: serializzare JSON su un file
Perché? Ecco un confronto delle caratteristiche tra i comuni serializzatori e i test benchmark † ‡.
Di seguito è riportato un grafico delle prestazioni tratto dall'articolo collegato:
Questo post separato afferma che:
Json.NET è sempre stato efficiente in termini di memoria, eseguendo lo streaming della lettura e della scrittura di documenti di grandi dimensioni anziché caricarli interamente in memoria, ma sono stato in grado di trovare un paio di posizioni chiave in cui le allocazioni degli oggetti potrebbero essere ridotte ...... (ora) Json.Net (6.0) alloca 8 volte meno memoria rispetto a JavaScriptSerializer ‡
Aggiornamento da .Net Core 3.0
Un nuovo bambino sul blocco da quando è System.Text.Json
stato scritto questo è stato aggiunto a .Net Core 3.0. Microsoft fa diverse affermazioni su come ora sia meglio di Newtonsoft . Compreso che è più veloce di Newtonsoft . come sopra, ti consiglio di provare questo ‡ .
† I benchmark sembrano essere Json.Net 5, la versione corrente (per iscritto) è 10. Quale versione dei serializzatori .Net standard utilizzati non è menzionata
‡ Questi test provengono ovviamente dagli sviluppatori che gestiscono la libreria. Non ho verificato i loro reclami . In caso di dubbio, provali tu stesso.
JavaScriptSerializer
eDataContractJsonSerializer
?