Как написать Json-файл в C #?

Привет, мне нужно записать следующие данные в текстовый файл, используя формат Json на C #? СБОРКИ важны, чтобы быть действительными JSON FORMAT

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

и вот мой модельный class

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

Я бы порекомендовал Json.Net , см. Пример ниже:

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

Или немного более эффективная версия вышеуказанного кода (не использует строку в качестве буфера):

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

Документация: Сериализовать JSON в файл


Зачем? Вот сравнение функций между обычными сериализаторами, а также контрольные тесты † ‡.

Ниже приведен график производительности, взятый из связанной статьи:

введите описание изображения здесь

В этом отдельном сообщении говорится, что:

Json.NET всегда была эффективной с точки зрения памяти, streamового чтения и записи больших документов, а не загрузки их полностью в память, но я смог найти несколько ключевых мест, где можно было бы уменьшить выделение объектов …… (сейчас) Json.Net (6.0) выделяет в 8 раз меньше памяти, чем JavaScriptSerializer

‡.

† Benchmarks выглядит как Json.Net 5, текущая версия (при записи) – 10. Какая версия стандартных сериализаторов .Net не упоминается

‡ Эти тесты, очевидно, от разработчиков, которые поддерживают библиотеку. Я не подтвердил их претензии . Если сомневаетесь, проверьте их самостоятельно.

Пример в ответе Лиама сохраняет файл как строку в одной строке. Я предпочитаю добавлять форматирование. Кто-то в будущем может захотеть изменить какое-то значение вручную в файле. Если вы добавите форматирование, это будет проще сделать.

Следующее добавляет основной отступ JSON:

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

Для этого есть встроенная функциональность с использованием 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); 
  • Ошибка десериализации Newtonsoft JSON.net, где поля в порядке изменения JSON
  • Как я могу зашифровать выбранные свойства при сериализации моих объектов?
  • Как использовать Json.NET для JSON-моделирования в проекте MVC5?
  • Json.NET Отключить десериализацию в DateTime
  • Использование JSON.NET для возврата ActionResult
  • C # WCF REST. Как вы используете сериализатор JSON.Net вместо стандартного DataContractSerializer?
  • Разбор JSON DateTime от JSON Serializer от Newtonsoft
  • Отключить использование JSON.net
  • Строка Parse Json в C #
  • Интерфейсы для десериализации в JSON.NET
  • Как конвертировать JSON в XML или XML в JSON?
  • Давайте будем гением компьютера.