Я бы порекомендовал 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());
System.IO.File.WriteAllText(@"D:\path.txt", json);
Или немного более эффективная версия приведенного выше кода (не использует строку в качестве буфера):
using (StreamWriter file = File.CreateText(@"D:\path.txt"))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, _data);
}
Документация: сериализовать JSON в файл
Зачем? Вот сравнение функций обычных сериализаторов, а также тесты производительности † ‡.
Ниже приведен график производительности, взятый из связанной статьи:
В этом отдельном посте говорится, что:
Json.NET всегда был эффективным с точки зрения памяти, передавая поток чтения и записи больших документов, а не загружая их полностью в память, но я смог найти пару ключевых мест, где можно было бы сократить выделение объектов ... (сейчас) Json.Net (6.0) выделяет в 8 раз меньше памяти, чем JavaScriptSerializer ‡
Обновление с .Net Core 3.0
С момента написания этой статьи System.Text.Json
появился новый ребенок, который был добавлен в .Net Core 3.0. Microsoft делает несколько заявлений о том, что теперь это лучше, чем Newtonsoft . В том числе и то, что он быстрее Newtonsoft . как и выше, я бы посоветовал вам проверить это самостоятельно ‡ .
† Тесты выглядят как Json.Net 5, текущая версия (на момент написания) - 10. Не упоминается какая версия стандартных сериализаторов .Net.
‡ Эти тесты, очевидно, принадлежат разработчикам, обслуживающим библиотеку. Я не проверял их утверждения . Если сомневаетесь, проверьте их сами.
JavaScriptSerializer
иDataContractJsonSerializer
классов?Пример в ответе Лиама сохраняет файл как строку в одной строке. Я предпочитаю добавлять форматирование. Кто-то в будущем может захотеть вручную изменить какое-то значение в файле. Если вы добавите форматирование, это сделать проще.
Следующее добавляет базовый отступ 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);
источник