C# でのシリアル化と逆シリアル化の例

⚡ スマートサマリー

C# のシリアル化は、オブジェクトをバイトストリームに変換してファイルに保存したり、アプリケーション間で送信したりできるようにします。逆シリアル化は、オブジェクトを再構築します。ここでは、例を交えながらオブジェクトのシリアル化と逆シリアル化の方法を学びます。

  • 🔄 それは何ですか: シリアル化はC#オブジェクトをファイルに書き込み、逆シリアル化はそれを読み戻します。
  • 🏷️ [シリアライズ可能]: クラスをシリアル化するには、[Serializable]属性が必要です。
  • 💾 バイナリ形式: FileStream を指定した BinaryFormatter は、オブジェクトをバイナリ形式で書き込みます。
  • 🧩 フォーマット: C# は、読みやすい出力のために XML および JSON シリアル化もサポートしています。
  • 🤖 AIによる支援: GitHub CopilotのようなAIツールは、シリアル化コードを瞬時に生成します。

C#におけるシリアル化と逆シリアル化

C# でのシリアル化と逆シリアル化

オブジェクトに関するデータをあるアプリケーションから別のアプリケーションに送信する必要がある場合は、シリアライゼーションとデシリアライゼーションの概念が使用されます。シリアライゼーションは、アプリケーションデータをファイルにエクスポートするために使用されます。宛先アプリケーションは、デシリアライゼーションを使用して、tracアプリケーションから取得したデータを、今後の利用のために保存する。

シリアル化は、C# クラス オブジェクトをファイルに書き込むかシリアル化する概念です。 Tutorial という C# クラスがあるとします。 そして、クラスには ID とチュートリアル名の 2 つのプロパティがあります。

シリアル化を使用すると、Tutorial クラスのデータ プロパティをファイルに直接書き込むことができます。 逆シリアル化は、ファイルからデータを読み取り、Tutorial オブジェクトを再度構築するために使用されます。

C#におけるシリアル化の種類

C# は複数のシリアル化形式をサポートしており、データの使用場所に応じて適切な形式を選択します。主な形式は以下のとおりです。

  • バイナリシリアル化 オブジェクトをコンパクトなバイナリストリームに変換します。高速ですが、人間が読みやすい形式ではなく、.NETに依存しています。
  • XMLシリアル化 XmlSerializerクラスを使用して、オブジェクトのパブリックプロパティを読み取り可能なXMLファイルに書き込みます。
  • JSONシリアル化 System.Text.Json または Newtonsoft.Json を使用して、Web API で最も一般的な形式である軽量 JSON を生成します。
  • SOAPシリアル化 古いWebサービス向けにデータをSOAPメッセージとしてフォーマットします。

C# でオブジェクトをシリアル化する方法

これを実現する方法の例を見てみましょう。

この例では、コード内で以下の高レベルの手順を実行します。

  1. ID と Name という 2 つのプロパティを持つ Tutorial という名前のクラスを作成します。
  2. 次に、クラスからオブジェクトを作成し、ID プロパティに値「1」を割​​り当て、name プロパティに値「.Net」を割り当てます。
  3. 次に、シリアル化を使用して、上記のオブジェクトを Example.txt というファイルにシリアル化します。
  4. 最後に、逆シリアル化を使用してファイルからオブジェクトを逆シリアル化し、コンソールに値を表示します。

コンソール アプリケーションの Program.cs ファイルに以下のコードを入力します。

ステップ1) クラスを追加します。

最初のステップは、シリアル化に使用されるクラスを追加することです。

C# でオブジェクトをシリアル化する

Code 説明:-

  1. シリアル化が必要なクラスには[Serializable]属性が必要です。 これは C# のキーワードです。 このキーワードは Tutorial クラスに付加されます。 この属性を指定しないと、クラスをシリアル化しようとするとエラーが発生します。
  2. 次にシリアル化するクラスの定義です。 ここでは「Tutorial」というクラスを定義し、2 つのプロパティ (XNUMX つは「ID」、もう XNUMX つは「Name」) を提供します。

ステップ2) オブジェクトを作成します。

このステップでは、まず Tutorial クラスのオブジェクトを作成し、それを Example.txt というファイルにシリアル化します。

C# でオブジェクトをシリアル化する

Code 説明:-

  1. まず、Tutorial クラスのオブジェクトを作成します。 次に、値「1」を ID に割り当て、「.net」を name プロパティに割り当てます。
  2. 次に、オブジェクトをシリアル化またはバイナリ形式に変換するために使用されるフォーマッタ クラスを使用します。 シリアル化中のファイル内のデータはバイナリ形式で行われます。 次に、ファイル ストリーム オブジェクトを作成します。 ファイル ストリーム オブジェクトは、書き込み目的でファイル Example.txt を開くために使用されます。 キーワード FileMode.Create および FileMode.Write は、ファイルを書き込み目的で開く必要があることを明確に示すために使用されます。
  3. 最後に、Serialize メソッドを使用してバイナリ データをファイルに転送します。 次に、書き込みが行われたため、ストリームを閉じます。 操作 完了です。

ステップ3) 逆シリアル化を使用します。

最後に、データがファイル内に存在することを確認するために、逆シリアル化を使用してファイルからオブジェクトを逆シリアル化します。

C# でオブジェクトをシリアル化する

using System;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  [Serializable]
  class Tutorial
  {
  public int ID;
  public String Name;
   static void Main(string[] args)
   {
    Tutorial obj = new Tutorial();
    obj.ID = 1;
    obj.Name = ".Net";

    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Create,FileAccess.Write);

    formatter.Serialize(stream, obj);
    stream.Close();

    stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Open,FileAccess.Read);
    Tutorial objnew = (Tutorial)formatter.Deserialize(stream);

    Console.WriteLine(objnew.ID);
    Console.WriteLine(objnew.Name);

    Console.ReadKey();
  }
 }
}

Code 説明:-

  1. オブジェクトを作成します。」流れ」をクリックして、ファイル Example.txt を読み取り専用モードで開きます。
  2. 次に、オブジェクトを逆シリアル化するために使用されるフォーマッタ クラスを使用します。このクラスは Example.txt ファイルに保存されています。 返されるオブジェクトはオブジェクト objnew に設定されます。
  3. 最後に、「ID」プロパティと「name」プロパティを使用して、オブジェクト「objnew」のプロパティをコンソールに表示します。

上記のコードを設定し、プロジェクトを実行すると、 Visual Studioの、以下の出力が得られます。

出力:-

C# でオブジェクトをシリアル化する

上記の出力から、ファイルの値が適切に逆シリアル化され、コンソールに表示されていることがわかります。

C#におけるJSONシリアル化

JSONは、現代のアプリケーションやWeb APIで最も広く使用されているフォーマットです。 System.Text.Json namespace は、以下に示すように、単一のメソッド呼び出しでオブジェクトのシリアル化と逆シリアル化を行います。

using System;
using System.Text.Json;
namespace DemoApplication
{
  class Tutorial
  {
    public int ID { get; set; }
    public string Name { get; set; }
  }
  class Program
  {
    static void Main(string[] args)
    {
      Tutorial obj = new Tutorial { ID = 1, Name = ".Net" };
      string json = JsonSerializer.Serialize(obj);
      Console.WriteLine(json);

      Tutorial objnew = (Tutorial)JsonSerializer.Deserialize(json, typeof(Tutorial));
      Console.WriteLine(objnew.Name);
      Console.ReadKey();
    }
  }
}

出力:

{"ID":1,"Name":".Net"}
.Net

よくあるご質問

シリアル化は、C# オブジェクトをバイトストリーム(バイナリ、XML、または JSON)に変換し、ファイルに保存したり、他のアプリケーションに送信したりできるようにします。逆シリアル化は、そのデータからオブジェクトを再構築します。

[Serializable]属性は、そのクラスのオブジェクトをシリアル化可能にするためのものです。この属性がない場合、バイナリシリアル化でオブジェクトをファイルに書き込もうとすると例外が発生します。

C# は、バイナリシリアル化(コンパクト、.NET のみ)、XmlSerializer による XML シリアル化、System.Text.Json による JSON シリアル化、および古い Web サービス向けの SOAP シリアル化をサポートしています。

シリアライゼーションはオブジェクトのデータをファイルまたはストリームに書き込み、デシリアライゼーションはそのデータを読み込み、メモリ内で元のオブジェクトを再構築します。

BinaryFormatterは現在では非推奨であり、逆シリアル化中に有害なコードを実行する可能性があるため、安全ではないとみなされています。 Microsoft 新規アプリケーションには、System.Text.Json または XmlSerializer の使用を推奨します。

GitHub CopilotのようなAIアシスタントは、SerializeおよびDeserialize呼び出しを自動補完し、[Serializable]属性を追加し、短いコメントからJSONまたはXMLシリアル化コードを生成します。

はい。AI搭載ツールはモデルクラスを生成し、JSON、XML、バイナリ形式から選択し、エラー処理を追加することで、シリアル化コードを安全かつ完全なものにします。

バイナリシリアル化には System.Runtime.Serialization.Formatters.Binary が、JSON には System.Text.Json が、XML には System.Xml.Serialization が使用されます。