C# で一部のオブジェクトをシリアル化および逆シリアル化する際に問題が発生しています。
次のように定義された、保存したいいくつかのプロパティを持つカスタムコントロールがあります
[Serializable()]
public partial class customUC: UserControl, ISerializable
{
(...)some methods here
public customUC(SerializationInfo info, StreamingContext ctxt)
{
this.att = (int)info.GetValue("att", typeof(int));
}
public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
{
info.AddValue("att", this.att);
}
}
そして別のクラスでは、次のようにシリアライズしている Dictionary があります。
[Serializable()]
public partial class data: ISerializable
{
public Dictionary<int, customUC> states { get; private set;}
(...)some methods here
public IVRDataModel(SerializationInfo info, StreamingContext ctxt)
{
**this.states = (Dictionary<int,customUC>)info.GetValue("states",typeof(Dictionary<int,customUC>));**
}
public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
{
info.AddValue("states", this.states);
}
}
次のように、バイナリフォーマッタを使用してクラスデータをシリアル化しています。
using (var stream = File.Create(path))
{
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, this);
}
そして、次を使用して逆シリアル化します。
Stream stream = File.Open(path, FileMode.Open);
BinaryFormatter bFormatter = new BinaryFormatter();
data d = (data)bFormatter.Deserialize(stream);
stream.Close();
問題は、辞書内の項目を逆シリアル化できないことです。の
info.GetValue("states",typeof(Dictionary<int,customUC>)
空の Dictionary を返すようです。