Comment écrire un fichier Json en C#?
Salut j'ai besoin d'écrire les données suivantes dans un fichier texte en utilisant le format Json en C#? Les parenthèses sont importantes pour être un FORMAT JSON valide
[
{
"Id": 1,
"SSN": 123,
"Message": "whatever"
},
{
"Id": 2,
"SSN": 125,
"Message": "whatever"
}
]
Et voici ma classe de modèle
public class data
{
public int Id { get; set; }
public int SSN { get; set; }
public string Message {get; set;}
}
4 réponses
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 dans un fichier JSON
Pourquoi? Voici une comparaison de fonctionnalités entre les sérialiseurs courants ainsi que des tests de référence .
Voici un graphique de performance tiré de l'article lié:
Ce message séparé , indique que:
Json.NET a toujours été efficace en mémoire, en diffusant la lecture et en écrivant 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
.
Repères semblent être Json.Net 5, la version actuelle (sur écriture) est 10. Quelle version des sérialiseurs. net standard utilisés n'est pas mentionnée
ces tests sont évidemment des développeurs qui maintian la bibliothèque. je n'ai pas vérifié leurs revendications. En cas de doute, testez-les.
L'exemple de la réponse de Liam enregistre le fichier en tant que chaîne sur une seule ligne. Je préfère ajouter le formatage. Quelqu'un à l'avenir peut vouloir changer une valeur manuellement dans le fichier. Si vous ajoutez du formatage, il est plus facile de le faire.
Ce qui suit ajoute l'indentation JSON de base:
string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented);
Il existe des fonctionnalités intégrées pour cela en utilisant la classe 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);