所以现在我有一个模块化系统用于与我的
Game()
对象交互,它处理游戏的所有数据存储。现在我正在开发一个系统,用于将 Game 对象的所有属性保存到 json 文件中。我已经想出使用序列化整个对象
save_json = json.dumps(G.__dict__, indent=4, default=lambda o: o.__dict__)
我现在的问题是反序列化,因为我的游戏对象是模块化的,我不知道对象内部将有什么样的嵌套对象,我需要一个动态系统来加载它们。最重要的是,Game 对象的一些属性是字典,一些是列表,一些只是变量。
我查找过的所有解决方案最终都会将反序列化硬编码到对象的
__init__
中,这对我不起作用,因为我的系统是模块化的。
这确实是
pickle
的设计目的
save_data = pickle.dumps(g)
...
loaded_g = pickle.loads(save_data)
但是如果您决定使用 json...也许以下内容会起作用
g = Game()
g.__dict__.update(json.loads(save_game))
我想提一下,pickle 并不安全,这是 ti 如何导致 RCE 的示例:https://knowledge-base.secureflag.com/vulnerability/unsafe_deserialization/unsafe_deserialization_python.html