Como escrever um arquivo Json em c #?

Oi eu preciso escrever os seguintes dados em um arquivo de texto usando o formato Json em c #? Os BRACKETS são importantes para serem válidos no JSON FORMAT

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

e aqui está minha aula de modelo

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

Eu recomendaria o Json.Net , veja o exemplo abaixo:

 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); 

Ou a versão um pouco mais eficiente do código acima (não usa uma string como 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); } 

Documentação: Serialize JSON para um arquivo


Por quê? Aqui está uma comparação de resources entre serialisers comuns, bem como testes de benchmark † ‡.

Abaixo está um gráfico do desempenho obtido do artigo vinculado:

insira a descrição da imagem aqui

Este post separado declara que:

O Json.NET sempre foi eficiente em termos de memory, transmitindo a leitura e escrevendo documentos grandes em vez de carregá-los completamente na memory, mas consegui encontrar alguns locais-chave onde as alocações de objects poderiam ser reduzidas …… (agora) Json.Net (6.0) aloca 8 vezes menos memory que JavaScriptSerializer

‡.

† Os benchmarks parecem ser Json.Net 5, a versão atual (por escrito) é 10. Qual versão dos serialisers .Net padrão utilizados não é mencionada

‡ Estes testes são obviamente dos desenvolvedores que mantêm a biblioteca. Eu não verifiquei suas reivindicações . Em caso de dúvida, teste-os você mesmo.

O exemplo na resposta de Liam salva o arquivo como string em uma única linha. Eu prefiro adicionar formatação. Alguém no futuro pode querer alterar algum valor manualmente no arquivo. Se você adicionar formatação, será mais fácil fazer isso.

O seguinte adiciona recuo básico JSON:

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

Há uma funcionalidade incorporada para isso usando a class 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);