Update 2020:この回答を書いてから 7 年が経ちました。まだまだ注目が集まりそうですね。2013 年には、Newtonsoft Json.Net がこの問題に対する答えでした。今でもこの問題に対する良い答えですが、もはや唯一の実行可能な選択肢ではありません。この回答にいくつかの最新の警告を追加するには:
- .Net Core には不気味なほど似たシリアライザーが追加されました
System.Text.Json
(以下を参照)。
- ありがたいことに時代は
JavaScriptSerializer
過ぎ去り、このクラスは .Net Core にもありません。これは、Newtonsoft が実行した多くの比較を無効にします。
- 最近、Json.Net がしばらく更新されていない、仕事で使用している脆弱性スキャン ソフトウェアを介して、私の注意を引くようになりました。2020 年の更新は終了し、最新バージョンの 12.0.3 は 1 年以上経過しています (2021 年)。
- 速度テスト(以前に以下に引用しましたが、古すぎて無関係に見えるため削除されました) は、Json.Net の古いバージョン (バージョン 6.0 で、最新は12.0.3であると言ったように) を古い .Net と比較しています。フレームワークのシリアライザー。
System.Text.Json
シリアライザーが Newtonsoft より優れている点の 1 つは、 async
/をサポートしていることです。await
Json.Net の日数は数えられていますか? それはまだ多く使用されており、MS ライブラリでまだ使用されています。おそらくそうではありません。しかし、これはこのライブラリの終わりの始まりのように感じます。
.Net Core 3.0+ および .Net 5
System.Text.Json
これを書いて以来、.Net Core 3.0 に追加されたブロックの新しい子供です。Microsoft は、これが 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 フレームワークおよび .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 をファイルにシリアライズする