我有一个名为 tileSet 的可序列化类,其中包含一个字典(ushort,Tile)。所述字典中的 Tile 类也是可序列化的,并且在其中包含一个字典(字符串,矩形 [])。
问题是当我去反序列化 tileSet 的实例时,而在 Tile 的反序列化构造函数中,尽管使用 SerializationInfo.GetValue 设置了 tile 的字典(字符串,矩形 []),但仍保持计数 = 0。
奇怪的是,一旦我们离开了 Tile 的反序列化构造函数,tileSet 就被完全反序列化了;我们看到 Tile 的 dictionary(string,Rectangle[]) 现在已正确填充。
有人对这种延迟有解释吗?(下面的淡化代码)
TileSet 反序列化:
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
}