Answers:
我会推荐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序列化为文件
为什么?这是常见串行器与基准测试 †‡ 之间的功能比较。
下面是从链接的文章中获得的性能图:
此单独的帖子指出:
Json.NET一直是内存高效的,可以流水读写大型文档,而不是将它们完全加载到内存中,但是我能够找到几个关键的地方可以减少对象分配…… (现在) Json.Net (6.0)比JavaScriptSerializer少分配8倍存储器‡
自编写以来System.Text.Json
,.Net Core 3.0中已添加了一个新成员。微软声称这比Newtonsoft更好。包括它比Newtonsoft更快。如上所述,建议您自己进行测试‡。
†基准似乎是Json.Net 5,当前版本(撰写时)为10。未提及使用的标准.Net序列化器版本。
‡这些测试显然来自维护该库的开发人员。我尚未核实他们的说法。如有疑问,请自己测试。
使用JavaScriptSerializer类为此提供了内置功能:
var json = JavaScriptSerializer.Serialize(data);
var responseData = //Fetch Data
string jsonData = JsonConvert.SerializeObject(responseData, Formatting.None);
System.IO.File.WriteAllText(Server.MapPath("~/JsonData/jsondata.txt"), jsonData);
JavaScriptSerializer
和DataContractJsonSerializer
类提供的内置支持有何不同?