簡體   English   中英

如何在 C# 中寫入 JSON 文件?

[英]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 是這個問題的答案。 現在它仍然是這個問題的一個很好的答案,但它不再是唯一可行的選擇 要為此答案添加一些最新的警告:

  • .Net Core 現在有令人毛骨悚然的System.Text.Json序列化器(見下文)
  • 幸運的是JavaScriptSerializer的日子已經過去了,這個類甚至不在 .Net Core 中。 這使 Newtonsoft 進行的許多比較無效。
  • 最近我也注意到了,通過我們在工作中使用的一些漏洞掃描軟件,Json.Net 已經有一段時間沒有更新了。 2020 年的更新已經枯竭,最新版本 12.0.3 已經一年多了(2021 年)。
  • 速度測試之前在下面引用但現在已刪除,因為它們已經過時以至於它們似乎無關緊要)正在比較舊版本的 Json.Net(版本 6.0,就像我說的最新版本是12.0.3 )與過時的 .Net框架序列化器。
  • System.Text.Json序列化程序與 Newtonsoft 相比的優勢之一是它支持async / await

Json.Net 的日子屈指可數了嗎? 它仍然被大量使用,並且仍然被 MS 庫使用。 所以可能不是。 但這確實感覺就像這個圖書館結束的開始,它很可能只是運行它的課程。


.Net 核心 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"
});

using FileStream createStream = File.Create(@"D:\path.json");
await JsonSerializer.SerializeAsync(createStream, _data);

文檔


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

文檔:將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM