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

Привет мне нужно записать следующие данные в текстовый файл, используя формат Json в C#? Скобки важны, чтобы быть допустимым форматом 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;}

}

4 ответов


Я бы рекомендовал 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 в файл


почему? Вот характеристика сравнение между общим serialisers а также тесты .

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

enter image description here

этой отдельный пост, указано, что:

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

.

показатели представляются Json.Net 5 текущая версия (на запись) 10. Какую версию стандарта .Сетка используется serialisers не упоминается

эти тесты явно от разработчиков, maintian набор библиотек. Я не проверил их претензии. Если сомневаетесь, проверьте их сами.


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

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

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

для этого встроена функциональность с помощью Класс 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);