我在Server
课程中制作JSON文件时遇到了麻烦。这是我的班级:
public class CsServerInfo
{
public string ip { get; set; }
public string name { get; set; }
}
我们的想法是在Button Click
上将新服务器添加到JSON文件中。这意味着每次我点击一个按钮(在WPF窗口中,TextBoxes
和IP
属性都有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}]
,但我无法理解。谢谢你的帮助
答案 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,它运行良好,并且格式正确。