ISerializable
インターフェイスをC#で実装するときは、SerializationInfo
オブジェクトを取得し、さまざまなGetInt32
,GetObject
などのメソッドを使用してクエリを実行して、逆シリアル化しようとしているオブジェクトのフィールドを埋めるコンストラクタを提供します。SerializationInfoにTryGetValueメソッドがないのはなぜですか?
[Serializable]
属性を使用するのではなく、このインターフェイスを実装する主な理由の1つは、下位互換性のためです。クラスに新しいフィールドを追加した場合、シリアル化された古いバージョンによってSerializationException
がキャッチされます適切な方法でそれらを扱う。
私の質問は次のとおりです。なぜ、本質的にコントロールフローなのか、これらの例外を使用する必要がありますか?しばらく前に保存された多数のクラスを逆シリアル化すると、各クラスの各フィールドが欠落すると例外がスローされ、実際にはパフォーマンスが低下します。
SerializationInfo
クラスでは、TryGetValue
メソッドが提供されないため、名前文字列が存在しない場合は単にfalse
を返します。
誰を確認する:「..それはMS宛だ推測を必要としている人のための
私の実装をm個そのクラスを実装 –
おそらくここにいる:P –