1. ホーム
  2. c#

Serializable属性の使用とISerializableの実装の違いは何ですか?

2023-10-11 03:58:30

質問

を使用することの違いは何ですか? Serializable 属性を使用することと ISerializable インターフェースを実装していますか?

どのように解決するのですか?

を使用する場合 SerializableAttribute 属性を使うと、コンパイル時にフィールドに属性を付けて、 実行時にシリアライズ機能がクラス/モジュール/アセンブリの型に対する リフレクションを実行して、属性に基づいて何をシリアライズすべきかを知ることができます。

[Serializable]
public class MyFoo { … }

上記は,シリアライズ機能がクラス全体をシリアライズする必要があることを示しています. MyFoo をシリアライズする必要があることを示しますが、一方

public class MyFoo
{
    private int bar;

    [Serializable]
    public int WhatBar
    {
       get { return this.bar; }
    }
}

属性を使用すると、シリアライズする必要のあるフィールドを選択的に選択することができます。

を実装した場合 ISerializable インタフェース をオーバーライドすると、シリアライズはカスタムバージョンで効果的に上書きされます。 GetObjectData SetObjectData という形のコンストラクタを提供することで、(そして、) MyFoo(SerializationInfo info, StreamingContext context) という形のコンストラクタを提供することで、データのシリアライズをより細かく制御することができます。

参照 StackOverflowのカスタムシリアライズの例を参照してください。 . これは、シリアライズされたデータの異なるバージョンと後方互換性を維持する方法を示しています。

これが役立つことを願っています。