如何使用正确的格式从C#中的类生成JSON文件

时间:2016-06-27 22:29:31

标签: c# json json.net

我在Server课程中制作JSON文件时遇到了麻烦。这是我的班级:

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

我们的想法是在Button Click上将新服务器添加到JSON文件中。这意味着每次我点击一个按钮(在WPF窗口中,TextBoxesIP属性都有Name)时,应该将新服务器添加到JSON文件中。

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

问题是我得到格式不正确的JSON文件:

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

服务器之间没有逗号,如果我使用ToArray()我得到:

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

正确的格式应为[{server properties}, {another server}],但我无法理解。谢谢你的帮助

3 个答案:

答案 0 :(得分:3)

您一次将一台服务器的JSON文本附加到该文件。您应该解析现有列表,添加服务器,然后序列化整个列表。

// 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 :(得分:1)

[{server properties}, {another server}]这是一个对象列表。 你应该序列化列表

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

如果您需要追加文件,您应该从文件到列表中读取所有内容,添加新内容并保存回来。

答案 2 :(得分:0)

不要尝试将JSON附加到文件中。让Json.NET处理序列化到JSON的工作。您应该操作List<CsServerInfo>并在完成修改后序列化整个列表。这样,当您进行序列化和保存时,Json.NET正在生成JSON,它运行良好,并且格式正确。