Как написать файл 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 а также тесты .
Ниже приведен график производительности, взятый из связанная статья:
этой отдельный пост, указано, что:
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);