184

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

4 に答える 4

369

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

于 2013-06-04T15:25:28.763 に答える
8

JavaScriptSerializer Classを使用して、このための機能が組み込まれています。

var json = JavaScriptSerializer.Serialize(data);
于 2013-06-04T15:26:23.283 に答える
5
var responseData = //Fetch Data
string jsonData = JsonConvert.SerializeObject(responseData, Formatting.None);
System.IO.File.WriteAllText(Server.MapPath("~/JsonData/jsondata.txt"), jsonData);
于 2016-11-05T22:33:55.487 に答える