2

辞書 (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
}
4

1 に答える 1