Mise à jour 2020 : Cela fait 7 ans que j'ai écrit cette réponse. Elle semble toujours susciter beaucoup d'attention. En 2013, Newtonsoft Json.Net était LA réponse à ce problème. Maintenant, c'est toujours une une bonne réponse à ce problème, mais ce n'est plus la seule option viable. . Pour ajouter quelques mises en garde actualisées à cette réponse :
- .Net Core dispose maintenant de l'effroyablement similaire
System.Text.Json
sérialiseur (voir ci-dessous)
- Les jours de la
JavaScriptSerializer
sont heureusement passées et cette classe n'est même pas dans .Net Core. Cela invalide une grande partie des comparaisons effectuées par Newtonsoft.
- J'ai également appris récemment, par le biais d'un logiciel d'analyse des vulnérabilités que nous utilisons au travail, que Json.Net n'avait pas été mis à jour depuis un certain temps. Les mises à jour en 2020 se sont taries et la dernière version, 12.0.3, a plus d'un an (2021).
- El tests de vitesse ( précédemment cité ci-dessous mais qui ont été retirés car ils sont tellement dépassés qu'ils ne semblent pas pertinents) comparent une ancienne version de Json.Net (version 6.0 et, comme je l'ai dit, la plus récente est 12.0.3 ) avec une version obsolète de .Net Cadre de travail sérialiseur.
- Un avantage que le
System.Text.Json
sérialiseur par rapport à Newtonsoft est la prise en charge des éléments suivants async
/ await
Les jours de Json.Net sont-ils comptés ? Il est encore beaucoup utilisé et il est encore utilisé par les bibliothèques MS. Donc probablement pas. Mais cela ressemble au début de la fin pour cette bibliothèque qui pourrait bien avoir suivi son cours.
.Net Core 3.0+ et .Net 5
Un nouveau venu dans le quartier depuis la rédaction de cet article est System.Text.Json
qui a été ajouté à .Net Core 3.0. Microsoft affirme à plusieurs reprises que ce logiciel est désormais meilleur que Newtonsoft. . Y compris que c'est plus rapide que Newtonsoft . Je vous conseille de le tester vous-même .
Exemples :
using System.Text.Json;
using System.Text.Json.Serialization;
List<data> _data = new List<data>();
_data.Add(new data()
{
Id = 1,
SSN = 2,
Message = "A Message"
});
string json = JsonSerializer.Serialize(_data);
File.WriteAllText(@"D:\path.json", json);
ou
using System.Text.Json;
using System.Text.Json.Serialization;
List<data> _data = new List<data>();
_data.Add(new data()
{
Id = 1,
SSN = 2,
Message = "A Message"
});
await using FileStream createStream = File.Create(@"D:\path.json");
await JsonSerializer.SerializeAsync(createStream, _data);
Documentation
Newtonsoft Json.Net (.Net framework et .Net Core)
Une autre option est Json.Net voir l'exemple ci-dessous :
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);
Ou la version légèrement plus efficace du code ci-dessus (qui n'utilise pas une chaîne de caractères comme tampon) :
//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);
}
Documentation : Sérialisation de JSON vers un fichier