我需要在 C# 中使用 JSON 格式将以下数据写入文本文件。括号对于它是有效的 JSON 格式很重要。
[ { "Id": 1, "SSN": 123, "Message": "whatever" }, { "Id": 2, "SSN": 125, "Message": "whatever" } ]
这是我的模型类:
public class data { public int Id { get; set; } public int SSN { get; set; } public string Message { get; set;} }
2020 年更新: 我写这个答案已经 7 年了。它似乎仍然受到很多关注。2013 年,Newtonsoft Json.Net 是这个问题的答案。现在它仍然是 这个问题的一个很好的答案,但它不再是唯一可行的选择 。要为此答案添加一些最新的警告:
System.Text.Json
JavaScriptSerializer
async
await
Json.Net 的日子屈指可数了吗?它仍然被大量使用,并且仍然被 MS 库使用。所以可能不会。但这确实感觉像是这个库的结束的开始,它很可能只是运行它的过程。
自从写这篇文章以来,一个新的孩子System.Text.Json已经被添加到 .Net Core 3.0 中。微软多次声称它现在比 Newtonsoft 更好。包括它比 Newtonsoft 更快。我建议你自己测试一下.
例子:
using System.Text.Json; using System.Text.Json.Serialization; List<data> _data = new List<data>(); _data.Add(new data() { Id = 1, SSN = 2, Message = "A Message" }); string json = JsonSerializer.Serialize(_data); File.WriteAllText(@"D:\path.json", json);
或者
using System.Text.Json; using System.Text.Json.Serialization; List<data> _data = new List<data>(); _data.Add(new data() { Id = 1, SSN = 2, Message = "A Message" }); await using FileStream createStream = File.Create(@"D:\path.json"); await JsonSerializer.SerializeAsync(createStream, _data);
文档
另一种选择是Json.Net,请参见下面的示例:
List<data> _data = new List<data>(); _data.Add(new data() { Id = 1, SSN = 2, Message = "A Message" }); string json = JsonConvert.SerializeObject(_data.ToArray()); //write string to file System.IO.File.WriteAllText(@"D:\path.txt", json);
或者上面代码的稍微高效的版本(不使用字符串作为缓冲区):
//open file stream using (StreamWriter file = File.CreateText(@"D:\path.txt")) { JsonSerializer serializer = new JsonSerializer(); //serialize object directly into file stream serializer.Serialize(file, _data); }
文档: 将 JSON 序列化为文件