如何用c#编写JSON文件



我需要在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序列化器(见下文)
  • 值得庆幸的是,JavaScriptSerializer的时代已经过去了,这个类甚至不在。net Core中。这使得Newtonsoft运行的许多比较无效。
  • 速度测试(之前在下面引用过,但现在删除了,因为它们太过时了,看起来无关紧要)比较的是旧版本的Json。.Net(6.0版本,如我所说的最新版本是12.0.3)使用过时的。Net 框架序列化器。
  • 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);

相关内容

  • 没有找到相关文章

最新更新