の違いについて教えてください使用を直列化可能でない属性&実施ISerializable?
-
23-09-2019 - |
質問
の違いについて教えてくださいを使用 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からの継承では、カスタム(デ)シリアライズを実装することができます。のみシリアライズ属性を使用する場合、(デ)シリアライゼーションは、属性によって制御され、あまり柔軟であることができる。