[英]How to write a JSON file in C#?
我需要使用 C# 格式的 JSON 格式将以下数据写入文本文件。 括号对于它是有效的 JSON 格式很重要。
[
{
"Id": 1,
"SSN": 123,
"Message": "whatever"
},
{
"Id": 2,
"SSN": 125,
"Message": "whatever"
}
]
这是我的 model class:
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
的日子已经过去了,这个类甚至不在 .Net Core 中。 这使 Newtonsoft 进行的许多比较无效。System.Text.Json
序列化程序与 Newtonsoft 相比的优势之一是它支持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"
});
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 序列化为文件
Liam 的答案中的示例将文件作为字符串保存在一行中。 我更喜欢添加格式。 将来有人可能想要手动更改文件中的某些值。 如果您添加格式,这样做会更容易。
以下添加了基本的 JSON 缩进:
string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented);
有使用JavaScriptSerializer Class 的内置功能:
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);
如果您喜欢 StreamWriter 选项,您还可以使用格式:
using (StreamWriter file = File.CreateText(mFileName))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Formatting = Formatting.Indented;
serializer.Serialize(file, Current);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.