Recomendaría Json.Net , vea el ejemplo a continuación:
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 versión un poco más eficiente del código anterior (no usa una cadena como búfer):
//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);
}
Documentación: serializar JSON a un archivo
¿Por qué? Aquí hay una comparación de características entre los serializadores comunes, así como las pruebas de referencia † ‡.
A continuación se muestra un gráfico del rendimiento tomado del artículo vinculado:
Esta publicación separada establece que:
Json.NET siempre ha sido eficiente en la memoria, transmitiendo la lectura y escribiendo documentos grandes en lugar de cargarlos completamente en la memoria, pero pude encontrar un par de lugares clave donde las asignaciones de objetos podrían reducirse ... (ahora) Json.Net (6.0) asigna 8 veces menos memoria que JavaScriptSerializer ‡
Actualización desde .Net Core 3.0
Un nuevo chico en el bloque desde que escribió esto es el System.Text.Json
que se ha agregado a .Net Core 3.0. Microsoft hace varias afirmaciones de cómo esto es, ahora, mejor que Newtonsoft . Incluyendo que es más rápido que Newtonsoft . como se indicó anteriormente, le aconsejo que pruebe esto usted mismo ‡ .
† Los puntos de referencia parecen ser Json.Net 5, la versión actual (en la escritura) es 10. ¿Qué versión de los serializadores .Net estándar utilizados no se menciona?
‡ Estas pruebas son obviamente de los desarrolladores que mantienen la biblioteca. No he verificado sus afirmaciones . En caso de duda, pruébelos usted mismo.
JavaScriptSerializer
yDataContractJsonSerializer
?El ejemplo en la respuesta de Liam guarda el archivo como una cadena en una sola línea. Prefiero agregar formato. Alguien en el futuro puede querer cambiar algún valor manualmente en el archivo. Si agrega formato, es más fácil hacerlo.
Lo siguiente agrega sangría básica JSON:
fuente
Hay una funcionalidad incorporada para esto usando la clase JavaScriptSerializer :
fuente
fuente