如何解决将数据添加到json而不是覆盖C#
所以我有使用newtonsoft库将数据写入JSON的代码。但是现在的问题是,JSON每次都会被覆盖,而不是在繁琐的数据后面添加。
这是我的代码
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter writer = new JsonTextWriter(sw))
{
writer.Formatting = Formatting.Indented;
writer.WriteStartArray();
writer.WriteStartObject();
writer.WritePropertyName("Temperature");
writer.WriteValue(temperature);
writer.WritePropertyName("Score");
writer.WriteValue(score);
writer.WritePropertyName("TrackId");
writer.WriteValue(trackId);
/*
writer.WriteStartObject();
writer.WritePropertyName("CPU");
writer.WriteValue("Intel");
writer.WritePropertyName("PSU");
writer.WriteValue("500W");
writer.WritePropertyName("Drives");
writer.WriteStartArray();
writer.WriteValue("DVD read/writer");
writer.WriteComment("(broken)");
writer.WriteValue("500 gigabyte hard drive");
writer.WriteValue("200 gigabyte hard drive");
writer.WriteEnd();
*/
writer.WriteEndObject();
writer.WriteEnd();
}
System.IO.File.WriteAllText(@"C:/Users/Kimeru/Documents/Dermalog Noah WPF/data.json",sb.ToString());
这是我想要实现的结果:
[
{
"Temperature": "24.6","Score": "37","TrackId": 3
},{
"Temperature": "16.8","Score": "38","TrackId": 4
}
]
我对.NET编码世界还很陌生,所以我正在尽力解释。
解决方法
我认为添加这样的json文件不是一个好主意, 将每个对象保存到新的json文件中,以便以后读取。
Path.GetTempFileName()
应该为您提供一个唯一的文件名
System.IO.File.WriteAllText($@"C:/Users/Kimeru/Documents/Dermalog Noah WPF/{Path.GetTempFileName()}_data.json",sb.ToString());
还有其他方法可以获取为您生成的唯一文件名
How to Generate unique file names in C#
,我认为更好的解决方案是:
- 读取json并转换为代表json对象的类对象列表
- 从列表中添加,修改或删除对象
- 将类对象列表序列化为json
- 将新的json写入文件
我举了一个小例子:
public class TrackData
{
public double Temperature { get; set; }
public double Score { get; set; }
public int TrackId { get; set; }
}
public void WriteJson(string filePath,List<TrackData> trackDataList)
{
string json = JsonConvert.SerializeObject(trackDataList);
using (StreamWriter sw = new StreamWriter(filePath))
{
sw.Write(json);
}
}
public List<TrackData> ReadJson(string filePath)
{
using (StreamReader sr = new StreamReader(filePath))
{
string json = sr.ReadToEnd();
return JsonConvert.DeserializeObject<List<TrackData>>(json);
}
}
现在您可以通过以下方式使用方法和类:
List<TrackData> myTrackDataList = ReadJson("Filepath");
TrackData newTrackData = new TrackData();
newTrackData.Score = 38;
newTrackData.Temperature = 22;
newTrackData.TrackId = 5;
myTrackDataList.Add(newTrackData);
WriteJson("FilePath",myTrackDataList);
,
您使用System.IO.File.WriteAllText();
覆盖现有文件。
只需使用System.IO.File.AppendAllText();
将文本添加到文件中即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。