wake-up-neo.com

Wie schreibe ich eine JSON-Datei in C #?

Ich muss die folgenden Daten im JSON-Format in C # in eine Textdatei schreiben. Die Klammern sind wichtig, damit das JSON-Format gültig ist.

[
  {
    "Id": 1,
    "SSN": 123,
    "Message": "whatever"

  },
  {
   "Id": 2,
    "SSN": 125,
    "Message": "whatever"
  }
]

Hier ist meine Modellklasse:

public class data
{
    public int Id { get; set; }
    public int SSN { get; set; }
    public string Message { get; set;}
}
121
user1429595

Ich würde Json.Net empfehlen, siehe Beispiel unten:

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

Oder die etwas effizientere Version des obigen Codes (verwendet keinen String als Puffer):

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

Dokumentation: JSON in eine Datei serialisieren


Warum? Hier ist ein Feature-Vergleich zwischen gängigen Serialisern sowie Benchmark-Tests † ‡.

Unten ist ein Diagramm der Leistung aus dem verlinkten Artikel entnommen:

enter image description here

In diesem separaten Beitrag heißt es:

Json.NET war schon immer speichereffizient und hat das Lesen und Schreiben großer Dokumente gestreamt, anstatt sie vollständig in den Speicher zu laden. Ich konnte jedoch einige wichtige Stellen finden, an denen die Objektzuweisungen reduziert werden konnten ...... (now) Json.Net (6.0) reserviert 8-mal weniger Speicher als JavaScriptSerializer

‡.

† Benchmarks scheinen Json.Net 5 zu sein, die aktuelle Version (beim Schreiben) ist 10. Welche Version von standardmäßigen .Net-Serialisern verwendet wird, wird nicht erwähnt

‡ Diese Tests stammen offensichtlich von den Entwicklern, die die Bibliothek warten. Ich habe ihre Behauptungen nicht bestätigt . Im Zweifelsfall testen Sie sie selbst.

229
Liam

Das Beispiel in Liams Antwort speichert die Datei als Zeichenfolge in einer einzelnen Zeile. Ich ziehe es vor, Formatierungen hinzuzufügen. Jemand in der Zukunft möchte möglicherweise einen Wert manuell in der Datei ändern. Wenn Sie Formatierungen hinzufügen, ist dies einfacher.

Mit dem folgenden Befehl wird eine grundlegende JSON-Einrückung hinzugefügt:

 string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented);
53
Michał S.

Hierfür gibt es eine integrierte Funktionalität mit der JavaScriptSerializer-Klasse :

var json = JavaScriptSerializer.Serialize(data);
7
Gabe
var responseData = //Fetch Data
string jsonData = JsonConvert.SerializeObject(responseData, Formatting.None);
System.IO.File.WriteAllText(Server.MapPath("~/JsonData/jsondata.txt"), jsonData);
4
Kulwant Singh