JSONファイルをC#で書き込む方法


146

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

回答:


276

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をファイルにシリアル化する


どうして?ここだ共通serialisersだけでなく、ベンチマークテストの機能の比較が †‡。

以下は、リンクされた記事から取得したパフォーマンスのグラフです。

ここに画像の説明を入力してください

この別の投稿では、

Json.NETは常にメモリ効率がよく、大きなドキュメントをメモリに完全にロードするのではなく、ストリーミングして読み書きしましたが、オブジェクトの割り当てを減らすことができるいくつかの重要な場所を見つけることができました...... (今) Json.Net (6.0)は、 JavaScriptSerializerよりも8倍少ないメモリを割り当て


.Net Core 3.0以降の更新

これを書いて以来、ブロックの新しい子供はSystem.Text.Json.Net Core 3.0に追加されました。Microsoftは、これが現在、Newtonsoftよりも優れていると主張しています。それを含めて、それはNewtonsoftより速いです。上記のように、これを自分でテストすることをお勧めします

†ベンチマークはJson.Net 5のようです。現在のバージョン(執筆時)は10です。使用されている標準の.Netシリアライザーのバージョンは記載されていません。

‡これらのテストは、明らかにライブラリを保守する開発者からのものです。私は彼らの主張を確認していません。疑わしい場合は、自分でテストしてください。


1
JSON.NETは、JavaScriptSerializerおよびDataContractJsonSerializerクラスによって提供される組み込みサポートとどのように異なりますか?
Robert Harvey 2013年

2
@RobertHarvey LiamのJson.Netリンクには、違いを示す素敵な表があります。もちろんそれを作った人たちから来ているので、もちろん一粒の塩と一緒に飲むべきですが、それは組み込みのものより確かに優れています。
Tim S.

1
はい私は何度もファイルに
追加

1
その場合は、ファイルを読み取ってオブジェクトに解析し、オブジェクトに追加してから、もう一度解析して戻す必要があります。
リアム2013年

4
@Drew Noakes最初にメモリに書き込まずにファイルに書き込みたい場合は、JSON.NETjames.newtonking.com /archive
2009

62

Liamの回答の例では、ファイルを文字列として1行で保存しています。書式を追加したい。将来誰かがファイルの値を手動で変更したいと思うかもしれません。書式を追加する方が簡単です。

以下は、基本的なJSONインデントを追加します。

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


4
var responseData = //Fetch Data
string jsonData = JsonConvert.SerializeObject(responseData, Formatting.None);
System.IO.File.WriteAllText(Server.MapPath("~/JsonData/jsondata.txt"), jsonData);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.