如何在C#中编写Json文件?

您好我需要在C#中使用Json格式将以下数据写入文本文件? BRACKETS对于有效的JSON格式非常重要

[ { "Id": 1, "SSN": 123, "Message": "whatever" }, { "Id": 2, "SSN": 125, "Message": "whatever" } ] 

这是我的模特class

 public class data { public int Id { get; set; } public int SSN { get; set; } public string Message {get; set;} } 

我会推荐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); 

或者上面的代码更有效的版本(不使用string作为缓冲区):

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


为什么? 这是常用的串行器和基准testing †‡的function比较 。

以下是链接文章的performance图:

在这里输入图像描述

这个单独的职位 ,指出:

Json.NET一直是内存有效的,stream读写大文档,而不是将它们全部加载到内存中,但是我能够find几个可以减less对象分配的关键位置…… (现在) Json.Net (6.0)分配的内存less于JavaScriptSerializer的8倍

‡。

†基准似乎是Json.Net 5,当前版本(写作时)是10.什么版本的标准.NET串行器使用没有提及

‡这些testing显然来自于图书馆的开发者。 我没有核实他们的要求 如果有疑问,自己testing一下。

Liam答案中的例子将文件保存为一行string。 我更喜欢添加格式。 将来有人可能想要在文件中手动更改一些值。 如果添加格式化,则更容易。

以下添加基本的JSON缩进:

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

这里使用JavaScriptSerializer类来构build这个function:

 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); 

这是用C#编写json对象的一种更简单的隐式方法

 var returnData = new[] { new{StudentId = 101, StudentName = "Joseph Leung"}, new{StudentId = 102, StudentName = "Pravin Jha"} };