カスタムタイプとシリアル化のリストの問題
-
15-10-2019 - |
質問
当社の製品の1つのバージョン2.0のリリースに取り組んでおり、バージョン1.0の顧客のインストールされたベースとのファイル互換性を維持したいと考えています。私はアプリケーションのほとんどのタイプでiSerializableを実装してきましたが、ひっかかったようです。
私はタイプを持っています、議論のためにそれを家族と呼びましょう
[Serializable]
public class Family :
IDisposable,
INotifyPropertyChanged
{
private string m_Address;
//....
private List<Name> m_People;
//...
}
これはバージョン1.0として出荷されたものです。2.0では、名前クラスを人に変更しました。これは事実上同じですが、わずかに異なるコンストラクターがあり、明らかに異なる名前があります。
[Serializable]
public class Family :
IDisposable,
INotifyPropertyChanged,
ISerializabe
{
private string m_Address;
//....
private List<Person> m_People;
//...
private Family(SerializationInfo info, StreamingContext context)
{
m_Address = info.GetString("m_Address");
m_People = (List<Person>)info.GetValue("m_People", typeof(List<Person>));
}
// <<GetObjectData Method>>
}
これは明らかに機能しません。タイプ「名前」はアセンブリにないので、それを修正するためにシリアル化バインダーを追加しました。
public sealed NamePersonSerializationBinder : SerializationBinder
{
if (typeName.StartsWith("System.Collections.Generic.List`1[[Company.Name"))
return typeof(List<Person>);
else if (typeName.StartsWith("Company.Name"))
return typeof(Person);
else
return null;
}
これは主に機能しますが、私が肥満を脱出すると、バインダーが呼び出され、正しいタイプを返しますが、人の脱派化コンストラクターは決して呼ばれません。例外は投げられていません、誰かがアイデアを持っていますか?
解決
修理済み!コンストラクターの完成に失敗していたベースタイプの人がいます。
所属していません StackOverflow