如何用C#写JSON文件?

hivapdat  于 2023-04-08  发布在  C#
关注(0)|答案(4)|浏览(231)

我需要在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;}
}
0lvr5msh

0lvr5msh1#

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

  • .NET Core现在有了类似的System.Text.Json序列化器(见下文)
  • 谢天谢地,JavaScriptSerializer的时代已经过去了,这个类甚至不在.NET Core中。这使得Newtonsoft运行的许多比较无效。
  • speed testspreviously quoted below,但现在被删除了,因为它们已经过时了,看起来无关紧要)正在比较旧版本的Json.Net(版本6.0,就像我说的,最新版本是12.0.3)和过时的.NetFramework序列化器。
  • 与Newtonsoft相比,System.Text.Json串行器的一个优势是它支持async/await

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

.NET Core 3.0+和.NET 5+

自从写了这篇文章以来,一个新的孩子是System.Text.Json,它已经被添加到.Net Core 3.0中。微软声称这是如何,现在,比Newtonsoft更好。包括它是faster than 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);

Documentation

Newtonsoft Json.Net(.Net framework和.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);
}

文件:Serialize JSON to a file

gkl3eglg

gkl3eglg2#

Liam的答案中的示例将文件保存为单行中的字符串。我更喜欢添加格式。将来可能有人想要手动更改文件中的某些值。如果您添加格式,则更容易做到这一点。
下面添加了基本的JSON缩进:

string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented);
k97glaaz

k97glaaz3#

使用JavaScriptSerializer Class可以实现以下内置功能:

var json = JavaScriptSerializer.Serialize(data);
hjzp0vay

hjzp0vay4#

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

相关问题