質問

の違いについて教えてくださいを使用 Serializable 属性および実施に ISerializable ス?

役に立ちましたか?

解決

をご利用の場合 SerializableAttribute 属性を属性フィールドトリップにコンパイル時にこの場合、実行時には、直列化さ施設などのserializeに基づく属性により反射のクラス/モジュール/組立タイプです。

[Serializable]
public class MyFoo { … }

以上のことを示す直列化さ施設はserialize全体のクラス MyFoo, は:

public class MyFoo
{
    private int bar;

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

の属性で選択的に選択する分野で必要とされます。

を遂行する場合は、 ISerializable インタ, は、直列化の効果がオーバーライド、カスタムしているものをオーバー GetObjectData SetObjectData (提供することによりコンストラクタの形式 MyFoo(SerializationInfo info, StreamingContext context))あるものになる可能性があ細度制御直列化さのデータです。

参照 この例では、カスタム直列化まStackOverflow.それは、直列化の下位互換性の異なるversioningsの直列化されたデータです。

武器agiは、dexで下がらないboxerぐ.

他のヒント

SerializableAttribute のデフォルトの直列化を行うためのフレームワークを指示しますプロセス。あなたはより多くの制御が必要な場合は、 ISerializableを実装することができますインターフェイスする。そして、あなたがそれに渡されGetObjectDataオブジェクトをSerializationInfoメソッドでオブジェクトをシリアル化し、更新するために、独自のコードをかけることになります。

ISerializableインタフェースは、のカスタムは、シリアライズのデフォルト以外のあなたが実装できます。 あなたはISerializableインターフェイスを実装するときは、

次のようにGetObjectDataメソッドをオーバーライドする必要があります
public void GetObjectData (SerializationInfo serInfo, 
                                    StreamingContext streamContext)
{
   // Implement custom Serialization
}
Serializableの属性でマーキングしているときに、maniallyシリアル化のロジックを実装するISerialize力は、(あなたはそれを意味した?)このクラスはシリアル化できるというバイナリシリアライザを教えてくれます。それは自動的にそれを行います。

ISerializableからの継承では、カスタム(デ)シリアライズを実装することができます。のみシリアライズ属性を使用する場合、(デ)シリアライゼーションは、属性によって制御され、あまり柔軟であることができる。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top