Je recommanderais 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 (n'utilise pas de chaîne 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érialiser JSON dans un fichier
Pourquoi? Voici une comparaison des fonctionnalités entre les sérialiseurs courants et les tests de référence † ‡.
Vous trouverez ci-dessous un graphique des performances extrait de l'article lié:
Cet article séparé déclare que:
Json.NET a toujours été efficace en mémoire, diffusant en continu la lecture et l'écriture de gros documents plutôt que de les charger entièrement en mémoire, mais j'ai pu trouver quelques endroits clés où les allocations d'objets pourraient être réduites ...... (maintenant) Json.Net (6.0) alloue 8 fois moins de mémoire que JavaScriptSerializer ‡
Mise à jour depuis .Net Core 3.0
Un nouvel enfant sur le bloc depuis l'écriture de ceci est System.Text.Json
qui a été ajouté à .Net Core 3.0. Microsoft fait plusieurs déclarations sur le fait que c'est, maintenant, mieux que Newtonsoft . Y compris qu'il est plus rapide que Newtonsoft . comme ci-dessus, je vous conseille de tester cela vous-même ‡ .
† Les benchmarks semblent être Json.Net 5, la version actuelle (à l'écriture) est 10. La version des sérialiseurs .Net standard utilisée n'est pas mentionnée
‡ Ces tests proviennent évidemment des développeurs qui gèrent la bibliothèque. Je n'ai pas vérifié leurs affirmations . En cas de doute, testez-les vous-même.
JavaScriptSerializer
etDataContractJsonSerializer
?L'exemple de la réponse de Liam enregistre le fichier sous forme de chaîne sur une seule ligne. Je préfère ajouter une mise en forme. Quelqu'un à l'avenir voudra peut-être modifier manuellement une valeur dans le fichier. Si vous ajoutez une mise en forme, il est plus facile de le faire.
Ce qui suit ajoute une indentation JSON de base:
la source
Il existe des fonctionnalités intégrées pour cela à l'aide de la classe JavaScriptSerializer :
la source
la source