Как написать файл JSON в С#?

Мне нужно записать следующие данные в текстовый файл, используя формат JSON в С#. Скобки важны для правильного формата JSON.

[
  {
    "Id": 1,
    "SSN": 123,
    "Message": "whatever"

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

Вот мой класс модели:

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

Ответ 1

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

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

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

//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 в файл


Почему? Здесь сравнение функций между обычными сериализаторами, а также тесты производительности & # 134; & # 135 ;.

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

enter image description here

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

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

& # 135 ;.

† Benchmarks appear to be Json.Net 5, the current version (on writing) is 10. What version of standard .Net serialisers used is not mentioned

‡ These tests are obviously from the developers who maintian the library. I have not verified their claims. If in doubt test them yourself.

Ответ 2

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

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

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

Ответ 3

Для этого есть встроенная функциональность, используя JavaScriptSerializer Class:

var json = JavaScriptSerializer.Serialize(data);

Ответ 4

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

Ответ 5

Это более простой неявный способ записи объекта json в С#

var returnData = new[]
{
    new{StudentId = 101, StudentName = "Joseph Leung"},                    
    new{StudentId = 102, StudentName = "Pravin Jha"}
};