2016-06-27 12 views
0

Ich habe Probleme, JSON-Datei von meiner Server Klasse. Das ist meine Klasse:Wie man eine JSON-Datei aus einer Klasse in C# mit korrektem Format erstellt

public class CsServerInfo 
{ 
    public string ip { get; set; } 
    public string name { get; set; } 
} 

Die Idee ist, neuen Server in JSON-Datei auf einem Button Click hinzuzufügen. Es bedeutet jedes Mal, wenn ich auf eine Schaltfläche klicke (in einem WPF-Fenster, das TextBoxes für IP und Name Eigenschaften hat) sollte ein neuer Server in JSON-Datei hinzugefügt werden.

CsServerInfo newServ = new CsServerInfo(); 
newServ.ip = this.serverIP.Text; 
newServ.name = this.serverName.Text; 

string json = JsonConvert.SerializeObject(newServ); 
     System.IO.File.AppendAllText(@"C:\JSON4.json", json); 

Das Problem ist, erhalte ich JSON-Datei, die nicht richtig formatiert ist:

{"ip":"52.45.24.2","name":"new"}{"ip":"45.45.45.4","name":"new2"} 

Es gibt kein Komma zwischen den Servern und wenn ich ToArray() verwende ich bekommen:

[{"ip":"52.45.24.2","name":"new"}][{"ip":"45.45.45.4","name":"new2"}] 

Richtiges Format sollte [{server properties}, {another server}] sein, aber ich bin nicht in der Lage, das zu bekommen. Danke für Ihre Hilfe

+0

Hängen Sie das json-Ergebnis des Serialisierungsaufrufs jedes Mal an die Datei an, wenn Sie das Objekt erstellen und serialisieren? Ich vermute es, und das ist dein Problem –

Antwort

3

Sie hängen den JSON-Text von jeweils einem Server an die Datei an. Sie sollten die vorhandene Liste analysieren, Ihren Server hinzufügen und anschließend die gesamte Liste serialisieren.

// TODO first check if there's an existing file or not 
var servers = 
    JsonConvert.DeserializeObject<List<CsServerInfo>>(File.ReadAllText(@"C:\JSON4.json")); 
servers.Add(newServ); 
File.WriteAllText(@"C:\JSON4.json", JsonConvert.SerializeObject(servers)); 
1

[{server properties}, {another server}] Dies ist eine Liste von Objekten. Sie sollten Liste serializie

List<CsServerInfo> listServ = new List<CsServerInfo>; 
... 
string json = JsonConvert.SerializeObject(listServ); 

Wenn Sie in der Datei anhängen müssen, sollten Sie alle aus der Datei lesen zurück zur Liste, fügen Sie neue und speichern.

0

Versuchen Sie nicht, JSON an die Datei anzuhängen. Lassen Sie Json.NET die Arbeit der Serialisierung zu JSON behandeln. Sie sollten eine List<CsServerInfo> manipulieren und die gesamte Liste serialisieren, wenn Sie mit der Bearbeitung fertig sind. Wenn Sie serialisieren und speichern, generiert Json.NET JSON, was gut funktioniert und korrekt formatiert wird.