这是我的课程:
当我反序列化这个对象时,我需要重新加载存储在“animations_”中的每个纹理。如果我在
问题出在哪里?
如何加载对象(
在这之后(以及
我只想指出,在这之前,我使用了相同的函数,现在它在
namespace myclass
{
[Serializable]
public class BasicGameObject : GameObject
{
protected Shadow shadow_ = null;
protected bool shadow_enabled_ = false;
protected Dictionary<string, AnimationManager> animations_ = new Dictionary<string, AnimationManager>();
protected Dictionary<string, string> loaded_textures_ = new Dictionary<string, string>();
protected string current_animation_;
protected int frame_width_;
protected int frame_height_;
//Costructor and other methods
//...
[OnDeserialized]
private void OnDeserialized(StreamingContext context)
{
Console.WriteLine("BasicGameObject");
foreach (KeyValuePair<string, AnimationManager> anim in animations_)
{
animations_[anim.Key].Reload(Loader.GameObjectTexturesList[loaded_textures_[anim.Key]]);
}
}
当我反序列化这个对象时,我需要重新加载存储在“animations_”中的每个纹理。如果我在
Console.WriteLine("BasicGameObject");
上设置断点,并点击anim
,调试器会显示anim
的Count
为0,但其他所有变量都具有正确的值。(我确定在保存时它不是0)问题出在哪里?
如何加载对象(
SERIALIZATIONOBJECT_
仅包含BasicGameObject
列表): IFormatter formatter = new BinaryFormatter();
SERIALIZATIONOBJECT_ = (SerializationObject)formatter.Deserialize(stream);
stream.Close();
在这之后(以及
OnDeserialized
调用之后!),如果我进行一些测试,我会发现对象的 anim
具有正确的值。为什么是在这里而不是在 "OnDeserialized" 里面呢?我只想指出,在这之前,我使用了相同的函数,现在它在
OnDeserialized
中,没有属性,只是一个函数,在反序列化之后调用它。我看到了自动化的可能性,认为这很好。也许它隐藏了一些东西。