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

本文关键字:JSON 文件 何用正 格式 | 更新日期: 2023-09-27 17:51:21

我有麻烦,使JSON文件从我的Server类。这是我的班级:

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

这个想法是在Button Click上的JSON文件中添加新的服务器。这意味着每次我点击一个按钮(在一个WPF窗口有TextBoxesIPName属性)一个新的服务器应该添加到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}],但我不能得到。谢谢你的帮助

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

每次将一个服务器的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));

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

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

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

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