我有一个非常复杂的对象网络,我想在不受信任的环境(Web浏览器,使用Unity 3D)中序列化和反序列化。普通BinaryFormatter
序列化工作正常,但反序列化因“访问私有字段”错误而崩溃。当我在本地跑步时,它完美无缺。
我宁愿不要让我的所有私有字段都公开我的代码库。如果没有这样做,反序列化在不受信任的环境中工作的最佳方法是什么?我愿意改变序列化方法,BinaryFormatter
是最容易上手的方法。
更新我不想阻止序列化访问我的私人数据,我想允许序列化访问我的私人数据而不必公开,妥协封装我的代码。
感谢。
答案 0 :(得分:2)
XmlSerializer
和JavaScriptSerializer
等序列化工具会对公众成员起作用,因此应该(交叉手指)在信任方面可以接受。如果你想要二进制文件,你也可以尝试使用protobuf-net - 但是我没有积极地测试这种情况(它适用于像Silverlight这样的东西,它有一个相当挑剔的信任模型)。
如果您想坚持使用BinaryFormatter
,但又不希望它直接接触您的字段,您可以实施ISerializable
,但手动完成所有操作都会感到痛苦。
答案 1 :(得分:1)
没有一个答案真的回答了我的问题(请参阅更新以获得澄清)。我最终使用BinaryWriter
编写了自己的简单序列化格式。最后,我意识到我所做的相当于为我的类手动实现ISerializable
接口。我不得不手动实现图形序列化代码。虽然不难,但它有点微妙,它已经为我做了。对于未来有这个问题的人来说,如果没有更好的答案,我建议手动实施ISerialzable
。
答案 2 :(得分:0)
好吧,如果你想通过序列化来阻止私有字段访问,你可能想要转移到甚至可能是Json序列化的Xml Serialization。
您可以通过在其上放置NonSerializaed属性来阻止私有字段序列化,但是当开发人员希望其字段包含有效值并且没有考虑到这些字段值在传输到时会丢失的事实时,您可能会遇到问题Unity插件。