我需要在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是这个问题的答案。现在它仍然是这个问题的一个很好的答案,但它不再是唯一可行的选择。为这个答案添加一些最新的警告:
- 。. NET Core现在有了类似的
System.Text.Json
序列化器(见下文) 值得庆幸的是, - 速度测试(之前在下面引用过,但现在删除了,因为它们太过时了,看起来无关紧要)比较的是旧版本的Json。.Net(6.0版本,如我所说的最新版本是12.0.3)使用过时的。Net 框架序列化器。
JavaScriptSerializer
的时代已经过去了,这个类甚至不在。net Core中。这使得Newtonsoft运行的许多比较无效。System.Text.Json
序列化器相对于Newtonsoft的一个优势是它支持async
/await
是Json。Net的日子屈指可数了?它仍然被大量使用,并且仍然被MS库使用。所以可能不会。但这确实感觉像是这个库结束的开始,它很可能只是运行它的轨道。
。.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 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);
}
Documentation: 序列化JSON到文件
Liam回答中的示例将文件保存为单行字符串。我更喜欢添加格式。将来有人可能想要手动更改文件中的某些值。如果你添加了格式,那就容易多了。
下面添加了基本的JSON缩进:
string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented);
使用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);