4

これらのフィールドは、新しいインスタンスが作成されたときのようにデフォルト値に設定されていますか?デシリアライズ時にこれらのフィールドを新しい値に設定するカスタムコードを作成できますか?

4

2 に答える 2

7

注:これはすべて、以下に固有のものBinaryFormatterです。

デフォルトでは、それらは完全に無視されます。タイプのデフォルト値、つまりゼロ値/ヌル値があります。

カスタムシリアル化(ISerializable)を実装する場合[NonSerializable]、は適用されず、必要なことを実行できますが、ほとんどの人はこれを実行する必要はありません。ただし、を実装することもできますIDeserializationCallback。これは、このようなフィールドを初期化する理想的な機会を提供します。

[Serializable]
class Foo : IDeserializationCallback
{
    // ... not shown
    void IDeserializationCallback.OnDeserialization(object sender)
    {
        // init your [NonSerialized] fields here
    }
}

他のシリアライザーには、シリアル化コールバックの実装が異なることに注意してください。その一部は、たとえば、によってサポートされています。BinaryFormatter

[Serializable]
class Foo
{
    // ... not shown
    [OnDeserializing]
    private void AnyMethodName(StreamingContext c)
    {
        // init your [NonSerialized] fields here
    }
}

属性ベースのコールバックは、特定のポイントでコードを挿入する機会を増やし、通常は推奨されます。4:、、、[OnDeserializing]およびがあり[OnDeserialized]ます。[OnSerializing][OnSerialized]

于 2012-09-17T09:45:11.377 に答える
0

新しいインスタンスが作成されると、このフィールドはタイプのデフォルト値になります。

オブジェクト構成にカスタム値を設定できます

于 2012-09-17T09:38:09.380 に答える