如何写一个JSON文件在c# ?

我需要在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;}
}
493560 次浏览

我写这个答案已经7年了。它似乎仍然得到了很多关注。2013年,Newtonsoft Json。网是这个问题的答案。现在它仍然是这个问题的好答案,但它不再是唯一可行的选择。在这个答案中添加一些最新的警告:

  • .NET Core现在有类似的System.Text.Json序列化器(见下文)
  • 谢天谢地,JavaScriptSerializer的时代已经过去了,这个类甚至不在。net Core中。这使得Newtonsoft进行的很多比较都无效。
  • 它最近也引起了我的注意,通过我们在Json工作中使用的一些漏洞扫描软件。网络有段时间没有更新了。2020年的更新已经枯竭和最新版本,12.0.3,已经超过一年(2021年)。
  • 速度测试 (之前引用如下,但现在删除,因为他们是如此过时,他们似乎无关紧要)比较Json的旧版本。Net(6.0版本,如我所说的最新版本是12.0.3),使用过时的。Net 框架序列化器。
  • 与Newtonsoft相比,System.Text.Json序列化器的一个优势是它支持async/await

是Json。网络的日子屈指可数了?它仍然被大量使用,并且仍然被MS库使用。所以可能不会。但这确实感觉像是这个图书馆结束的开始,它可能只是运行它的课程。


.NET Core 3.0+和。net 5+

自从写了这篇文章后,一个新加入的孩子是System.Text.Json,它已经被添加到。net Core 3.0中。微软多次宣称,现在它比牛顿软件(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核心)

另一个选项是Json。网,参见下面的例子:

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序列化为文件

使用JavaScriptSerializer类有内置的功能:

var json = JavaScriptSerializer.Serialize(data);

Liam回答中的示例将文件保存为一行字符串。我更喜欢添加格式。将来有人可能想手动更改文件中的某些值。如果你添加了格式,就更容易做到这一点。

下面添加了基本的JSON缩进:

 string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented);
var responseData = //Fetch Data
string jsonData = JsonConvert.SerializeObject(responseData, Formatting.None);
System.IO.File.WriteAllText(Server.MapPath("~/JsonData/jsondata.txt"), jsonData);