2020 年更新:我写这个答案已经 7 年了。它似乎仍然受到很多关注。 2013 年,Newtonsoft Json.Net 是这个问题的答案。现在它仍然是解决这个问题的好方法,但不再是唯一可行的选择。要为此答案添加一些最新的警告:
- .Net Core 现在拥有惊人相似的
System.Text.Json 序列化器(见下文)
- 谢天谢地,
JavaScriptSerializer 的日子已经过去了,这个课程甚至不在 .Net Core 中。这使得 Newtonsoft 进行的许多比较无效。
- 最近也引起了我的注意,通过我们在工作中使用的一些漏洞扫描软件,Json.Net 已经有一段时间没有更新了。 Updates in 2020 have dried up 和最新版本 12.0.3 已使用一年多(2021 年)。
-
speed tests(previously quoted below,但现在已删除,因为它们已经过时以至于它们似乎无关紧要)正在比较旧版本的 Json.Net(6.0 版,就像我说的那样,最新的是 12.0。 3) 带有过时的 .Net Framework 序列化程序。
-
System.Text.Json 序列化程序相对于 Newtonsoft 的一个优势是它支持 async/await
Json.Net 的日子屈指可数了吗?它仍然被大量使用,并且仍然被 MS 库使用。所以可能不会。但这确实让人觉得这个库很可能只是顺其自然。
.Net Core 3.0+ 和 .Net 5
写这篇文章后,一个新的孩子是System.Text.Json,它已被添加到.Net Core 3.0。 Microsoft makes several claims to how this is, now, better than Newtonsoft。包括它是faster than 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);
Documentation
Newtonsoft Json.Net(.Net 框架和 .Net Core)
另一个选项是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);
}
文档:Serialize JSON to a file