Polecam Json.NET , patrz poniższy przykład:
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);
Lub nieco wydajniejsza wersja powyższego kodu (nie używa łańcucha jako bufora):
//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);
}
Dokumentacja: Serializuj JSON do pliku
Czemu? Oto porównanie funkcji między popularnymi serializatorami, a także testy porównawcze † ‡.
Poniżej znajduje się wykres wydajności zaczerpnięty z połączonego artykułu:
Ten osobny post stwierdza, że:
Json.NET zawsze wydajnie korzystał z pamięci, przesyłając strumieniowo odczytywanie i pisanie dużych dokumentów zamiast ładowania ich w całości do pamięci, ale udało mi się znaleźć kilka kluczowych miejsc, w których można zmniejszyć alokacje obiektów ...... (teraz) Json.Net (6.0) przydziela 8 razy mniej pamięci niż JavaScriptSerializer ‡
Aktualizacja od .Net Core 3.0
Nowe dziecko w bloku od czasu napisania tego System.Text.Json
, zostało dodane do .Net Core 3.0. Microsoft twierdzi, że jest to teraz lepsze niż Newtonsoft . W tym, że jest szybszy niż Newtonsoft . jak wyżej, radzę przetestować to samodzielnie ‡ .
† Benchmarki wydają się Json.Net 5, aktualna wersja (w trakcie pisania) to 10. Która wersja standardowych seriali .Net nie została wymieniona
‡ Te testy pochodzą oczywiście od programistów, którzy utrzymują bibliotekę. Nie zweryfikowałem ich twierdzeń . W razie wątpliwości sprawdź je sam.
JavaScriptSerializer
iDataContractJsonSerializer
?Przykład w odpowiedzi Liama zapisuje plik jako ciąg w jednej linii. Wolę dodawać formatowanie. Ktoś w przyszłości może chcieć ręcznie zmienić jakąś wartość w pliku. Jeśli dodasz formatowanie, będzie to łatwiejsze.
Poniższy tekst dodaje podstawowe wcięcie JSON:
źródło
Jest do tego wbudowana funkcjonalność przy użyciu klasy JavaScriptSerializer :
źródło
źródło