Как написать файл 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 в файл
почему? Вот это функция сравнения между обычными сериализаторами, а также тестовыми тестами .
Ниже приведен график производительности, взятый из связанная статья:
этой отдельный пост, указано, что:
Json.NET всегда была эффективна память, потоковое чтение и запись больших документов, а не загрузка их полностью в память, но я смог найти несколько ключевых мест, где выделение объектов может быть уменьшено...... (сейчас) Json.Net (6.0) выделяет в 8 раз меньше памяти, чем JavaScriptSerializer
.
контрольные показатели, как представляется, Json.Net 5, текущая версия (при написании) составляет 10. Какая версия стандартных сериализаторов .Net используется не упоминается
эти тесты, очевидно,от разработчиков, которые поддерживают библиотеку. Я не проверил их претензии. Если вы сомневаетесь, проверьте их сами.
пример в ответе Лиама сохраняет файл в виде строки в одной строке. Я предпочитаю добавлять форматирование. Кто-то в будущем может захотеть изменить некоторые значения вручную в файле. Если вы добавляете форматирование, это проще сделать.
следующее добавляет основной отступ 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);

Comments