Json 保存后格式损坏
Json format broke after saving
所以我有一个带有列表的应用程序。我将此列表存储在 json 文件中,当应用程序为 运行 时,我对列表进行更改并将其另存为磁盘上的 .json 文件。
在用户关闭应用程序之前,我想重置一些值。在应用程序关闭之前保存时,json 的格式未正确保存。导致无效 json 文件。
关闭:
private void btnClose_Click(object sender, RoutedEventArgs e)
{
foreach (var customer in _currentCustomers) {
customer.State = TransferState.None;
customer.NextScan = String.Empty;
}
WriteCustomerList();
this.Close();
}
WriteCustomerList 方法:
try
{
using (var fileStream = new FileStream(_appConfigLocation, FileMode.OpenOrCreate, FileAccess.Write))
{
using (var br = new BinaryWriter(fileStream))
{
br.Write(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(_currentCustomers)));
}
}
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Failed to write customer list./n/n" + ex.Message, "Error!");
}
正确Json:
[{
"Username": "xxxxx",
"Password": "xxxx",
"RelationNumber": "xxxx",
"State": 3,
"NextScan": "",
"Interval": 1
}]
Json关闭后:
[{
"Username": "xxx",
"Password": "xxxx",
"RelationNumber": "xxxx",
"State": 3,
"NextScan": "",
"Interval": 1
}]26","Interval":1}]
您没有截断文件,所以以前的内容仍然存在(导致第一个 ]
之后的内容)。
在您的情况下,使用 File.WriteAllText
会更安全、更短的解决方案:
File.WriteAllText(_appConfigLocation,
JsonConvert.SerializeObject(_currentCustomers));
如果您需要更多控制 - 使用 FileMode.Truncate
或 How to truncate a file in c#? 中推荐的其他方法。
所以我有一个带有列表的应用程序。我将此列表存储在 json 文件中,当应用程序为 运行 时,我对列表进行更改并将其另存为磁盘上的 .json 文件。
在用户关闭应用程序之前,我想重置一些值。在应用程序关闭之前保存时,json 的格式未正确保存。导致无效 json 文件。
关闭:
private void btnClose_Click(object sender, RoutedEventArgs e)
{
foreach (var customer in _currentCustomers) {
customer.State = TransferState.None;
customer.NextScan = String.Empty;
}
WriteCustomerList();
this.Close();
}
WriteCustomerList 方法:
try
{
using (var fileStream = new FileStream(_appConfigLocation, FileMode.OpenOrCreate, FileAccess.Write))
{
using (var br = new BinaryWriter(fileStream))
{
br.Write(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(_currentCustomers)));
}
}
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Failed to write customer list./n/n" + ex.Message, "Error!");
}
正确Json:
[{
"Username": "xxxxx",
"Password": "xxxx",
"RelationNumber": "xxxx",
"State": 3,
"NextScan": "",
"Interval": 1
}]
Json关闭后:
[{
"Username": "xxx",
"Password": "xxxx",
"RelationNumber": "xxxx",
"State": 3,
"NextScan": "",
"Interval": 1
}]26","Interval":1}]
您没有截断文件,所以以前的内容仍然存在(导致第一个 ]
之后的内容)。
在您的情况下,使用 File.WriteAllText
会更安全、更短的解决方案:
File.WriteAllText(_appConfigLocation,
JsonConvert.SerializeObject(_currentCustomers));
如果您需要更多控制 - 使用 FileMode.Truncate
或 How to truncate a file in c#? 中推荐的其他方法。