更新2020:距离我写下这篇答案已经过去了7年。它仍然似乎受到了很多关注。在2013年,Newtonsoft Json.Net是解决这个问题的唯一答案。现在它仍然是一个解决这个问题的好方法,但不再是唯一可行的选择。为了使这个答案更加实时,请注意以下几点:
- .NET Core现在有一个非常相似的
System.Text.Json
序列化器(见下文)
- 感谢上帝,
JavaScriptSerializer
的日子已经过去了,而且这个类甚至不在.NET Core中。这使得Newtonsoft运行的许多比较都失效了。
- 速度测试(如下引用,但现在已被删除,因为它们太过时了,看起来不相关)正在将旧版本的Json.Net(版本6.0,正如我所说,最新版本是12.0.3)与过时的.Net Framework序列化器进行比较。
System.Text.Json
序列化器比Newtonsoft更具有优势,因为它支持async
/await
Json.Net的日子是否已经到头了?它仍然被很多人使用,并且它仍然被微软库使用。因此可能不会。但是这确实感觉像是这个库的末路开始了,也许它已经完成了其历程。
.NET Core 3.0+ 和 .NET 5+
自从写这篇文章以来,一个新的东西出现了,那就是 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);
文档
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());
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序列化到文件中
JavaScriptSerializer
和DataContractJsonSerializer
类提供的内置支持有何不同? - Robert Harveyserializer.Formatting = Formatting.Indented;
。 - JohnnyAce