Cómo escribir un archivo Json en C #?

Hola, necesito escribir los siguientes datos en un archivo de texto usando el formato Json en C #? LOS SOPORTES son importantes para ser válidos JSON FORMAT

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

y aquí está mi clase de modelo

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

Recomendaría Json.Net , vea el ejemplo a continuación:

 List _data = new List(); _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 un 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); } 

Documentación: serializar JSON en un archivo


¿Por qué? Aquí hay una comparación de características entre serializadores comunes, así como pruebas de referencia † ‡.

A continuación se muestra un gráfico de rendimiento tomado del artículo vinculado:

enter image description here

Esta publicación separada , establece que:

Json.NET siempre ha sido eficiente desde el punto de vista de la memoria, transmitiendo y leyendo 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

‡.

† Los benchmarks parecen ser Json.Net 5, la versión actual (en 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 reclamos . Si tiene dudas, pruébelos usted mismo.

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.

A continuación, se agrega una sangría JSON básica:

  string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented); 

Hay una funcionalidad incorporada para esto usando la clase JavaScriptSerializer :

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