辞書 (ushort,Tile) を含む tileSet というシリアル化可能なクラスがあります。上記のディクショナリの Tile クラスもシリアライズ可能であり、その中にディクショナリ (string,Rectangle[]) が含まれています。
問題は、SerializationInfo.GetValue を使用して設定されているにもかかわらず、Tile の Deserialization コンストラクターで、タイルの辞書 (string,Rectangle[]) がカウント = 0 のままであるときに、tileSet のインスタンスを逆シリアル化するときに発生します。
奇妙な部分は、Tile の逆シリアル化コンストラクターを離れると、tileSet が完全に逆シリアル化されることです。タイルの辞書 (string,Rectangle[]) が正しく入力されていることがわかります。
この遅延の説明はありますか?(以下の骨抜きのコード)
タイルセットの逆シリアル化:
Stream stream = File.Open(path, FileMode.Open);
BinaryFormatter bFormatter = new BinaryFormatter();
// The following line will place us in Tile's
// Deserialization constructor below
TileSet tileSet = (TileSet)bFormatter.Deserialize(stream);
// If debugging, by this point tileSet's, Tile's dictionary is
// now properly set with a count of 0.
stream.Close();
タイルの逆シリアル化コンストラクター:
//Deserialization Constructor
public Tile(SerializationInfo info, StreamingContext sContext)
{
mAnimations = (Dictionary<string, Rectangle[]>)
info.GetValue("animations",
typeof(Dictionary<string, Rectangle[]>));
mPaused = false;
mName = (string)info.GetValue("name", typeof(string));
mWalkable = (bool)info.GetValue("walkable", typeof(bool));
mInstanced = (bool)info.GetValue("instanced", typeof(bool));
setCurrentState((string)info.GetValue("currentState", typeof(string)));
//By this point mAnimations is not properly set but has a count=0
}