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;}

}
99
demandé sur Kiquenet 2013-06-04 19:23:48

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é:

entrez la description de l'image ici

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.

174
répondu Liam 2017-12-04 09:22:30

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);
41
répondu Michał S. 2015-04-23 08:11:29

Il existe des fonctionnalités intégrées pour cela en utilisant la classe JavaScriptSerializer :

var json = JavaScriptSerializer.Serialize(data);
7
répondu Gabe 2016-11-02 08:53:37
var responseData = //Fetch Data
string jsonData = JsonConvert.SerializeObject(responseData, Formatting.None);
System.IO.File.WriteAllText(Server.MapPath("~/JsonData/jsondata.txt"), jsonData);
3
répondu Kulwant Singh 2016-11-05 22:59:03