C# オブジェクトを JSON 文字列に変換する (.NET)
C# のオブジェクトを JSON 文字列に変換することをシリアライズと言います。これは、オブジェクトの状態をテキスト形式で表現するのに便利です。 .NET には、このための組み込みの機能とサードパーティライブラリがあります。
System.Text.Json を使った方法
.NET Core 以降では、System.Text.Json
名前空間が標準の JSON シリアライザとして提供されています。
using System.Text.Json;
// シリアライズするオブジェクト
var myObject = new { Name = "Alice", Age = 30 };
// オブジェクトを JSON 文字列に変換
string jsonString = JsonSerializer.Serialize(myObject);
Console.WriteLine(jsonString); // 出力: {"Name":"Alice","Age":30}
JsonSerializer.Serialize
メソッドは、指定されたオブジェクトを JSON 文字列に変換します。
Newtonsoft.Json (Json.NET) を使った方法
サードパーティライブラリの Newtonsoft.Json (Json.NET) も広く使用されています。
using Newtonsoft.Json;
// シリアライズするオブジェクト
var myObject = new { Name = "Bob", City = "Tokyo" };
// オブジェクトを JSON 文字列に変換
string jsonString = JsonConvert.SerializeObject(myObject);
Console.WriteLine(jsonString); // 出力: {"Name":"Bob","City":"Tokyo"}
重要なポイント
- シリアライズするオブジェクトのプロパティは、パブリックまたはシリアライズ可能である必要があります。
- JSON 文字列は、ネットワーク通信やデータ保存などに使用できます。
- デシリアライズは、JSON 文字列からオブジェクトを復元するプロセスです。
備考
System.Text.Json
は .NET Core 以降で推奨される方法です。- Newtonsoft.Json は多くのプロジェクトで使用されており、豊富な機能を提供します。
- シリアライズとデシリアライズのパフォーマンスは、使用するライブラリやオブジェクトの構造によって異なります。
using System.Text.Json;
// シリアライズするオブジェクト
var myObject = new { Name = "Alice", Age = 30 };
// オブジェクトを JSON 文字列に変換
string jsonString = JsonSerializer.Serialize(myObject);
Console.WriteLine(jsonString); // 出力: {"Name":"Alice","Age":30}
using System.Text.Json;
:System.Text.Json
名前空間を使用することを宣言します。この名前空間には JSON シリアライズ/デシリアライズのためのクラスが含まれています。var myObject = new { Name = "Alice", Age = 30 };
: 匿名型を使ってmyObject
という名前のオブジェクトを作成します。このオブジェクトにはName
とAge
というプロパティがあり、それぞれ "Alice" と 30 という値を持っています。string jsonString = JsonSerializer.Serialize(myObject);
:JsonSerializer.Serialize
メソッドを使ってmyObject
を JSON 文字列に変換し、その結果をjsonString
変数に代入します。Console.WriteLine(jsonString);
: 変数jsonString
の内容を出力します。この場合、出力は{"Name":"Alice","Age":30}
になります。
using Newtonsoft.Json;
// シリアライズするオブジェクト
var myObject = new { Name = "Bob", City = "Tokyo" };
// オブジェクトを JSON 文字列に変換
string jsonString = JsonConvert.SerializeObject(myObject);
Console.WriteLine(jsonString); // 出力: {"Name":"Bob","City":"Tokyo"}
using Newtonsoft.Json;
:Newtonsoft.Json
名前空間を使用することを宣言します。この名前空間は Newtonsoft.Json ライブラリの一部で、JSON シリアライズ/デシリアライズのための機能を提供します。
手動実装
- 直接 JSON 文字列を構築する: 最も低レベルな方法ですが、柔軟性が高く、パフォーマンスに優れる場合があります。しかし、コードが複雑になりがちです。
- StringBuilder を使用する: より効率的な文字列構築のために
StringBuilder
クラスを使用できます。
- DataContractJsonSerializer: WCF で使用されるシリアライザですが、JSON シリアライズにも使用できます。ただし、パフォーマンスや機能面で
System.Text.Json
やNewtonsoft.Json
に劣ることがあります。 - カスタムシリアライザ: 特殊な要件がある場合、カスタムシリアライザを実装することで細かい制御が可能になります。
考慮すべき要素
- パフォーマンス: 高いパフォーマンスが必要な場合は、手動実装や
System.Text.Json
を検討してください。 - 機能性: 特定の JSON フォーマットやカスタムシリアライゼーションが必要な場合は、
Newtonsoft.Json
やカスタムシリアライザが適しています。 - 互換性: .NET Framework のみをサポートする必要がある場合は、
DataContractJsonSerializer
を検討できますが、新しいプロジェクトではSystem.Text.Json
が推奨されます。
コード例 (手動実装)
using System.Text;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public static string ToJson(Person person)
{
var builder = new StringBuilder();
builder.Append("{");
builder.Append("\"Name\":\"").Append(person.Name).Append("\",");
builder.Append("\"Age\":").Append(person.Age);
builder.Append("}");
return builder.ToString();
}
注意事項
- 手動実装はエラーが発生しやすいので、注意が必要です。
- パフォーマンスの最適化は、特定のユースケースに合わせて行う必要があります。
- ライブラリの選択は、プロジェクトの要件と開発者の経験に基づいて行うことが重要です。
c# .net json