我有一个非常复杂的对象网络,我想在不受信任的环境(网络浏览器,使用 Unity 3D)中序列化和反序列化。普通 BinaryFormatter
序列化工作正常,但反序列化因“访问私有(private)字段”错误而崩溃。当我在本地运行时它完美运行。
我不想通过公开我所有的私有(private)字段来让我的代码库变得糟糕。在不这样做的情况下使反序列化在不受信任的环境中工作的最佳方法是什么?我愿意改变序列化方法,BinaryFormatter
是最容易上手的。
更新 我不想阻止序列化访问我的私有(private)数据,我想允许序列化访问我的私有(private)数据而不必将其公开,妥协封装我的代码。
谢谢。
最佳答案
像 XmlSerializer
和 JavaScriptSerializer
这样的序列化器对公共(public)成员起作用,所以它们应该(交叉手指)在信任方面可以接受地工作。如果您想要二进制文件,您也可以尝试使用 protobuf-net - 但我还没有积极测试这种情况(它适用于 Silverlight 之类的东西,它具有相当挑剔的信任模型)。
如果您想坚持使用 BinaryFormatter
但不希望它直接接触您的字段,您可以实现 ISerializable
,但是手动完成这一切是......痛苦的。
关于c# - 不受信任的反序列化策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4362783/