光学菲尔德]和[非序列化]有什么区别
-
24-09-2019 - |
题
我遇到了这个关于超凡者的问题:
如果不需要在避难所中需要什么值,您应适用于该字段?
me = [非序列化],答案= [optional field
我的肠道反应是非序列化的,但欧克斯说我错了。就[非矿化]属性而言,我有一个好主意,但是我仍然非常希望这样做。
据我所知,前者与同一组件的新版本和旧版本之间的版本策略冲突有关系。后者更关心不序列化场。还有什么可以使这两个区分开的吗? MSDN对此并不多,因为它们都使用XMlignoreAttribute在二进制形式和soapformatter上使用。
我的第二个问题是,您可以混合并匹配两个属性之一吗?我还没有使用它们。
只是把这个扔到那里,但是我的答案是否与[ondeSerialized]和IDEserilizationCallback接口的方式有关吗?
更新:
我知道,可选字段属性不会序列化数据成员持有的值,但非序列化甚至不会序列化数据成员或其值。
解决方案
这两个属性用于序列化方程的相对侧。
当您使用时 [NonSerialized]
, ,您是说“这个字段不应序列化” - 因此,它更像是一个“节省时间”属性。基本上,您是说该字段对于对象的串行状态并不重要。
当您使用时 [OptionalField]
, 另一方面,您仍将序列化该字段。但是,如果字段是 失踪 在 阅读时间 (当该流被应将其序列化为对象时),则不会提出任何例外。此属性确实旨在允许您在不破坏兼容性的情况下将新字段添加到现有的可序列化类型中。对象的较旧版本(缺少该字段)将被正常进行。
其他提示
只是玩英语, 不需要 和 可选的 在这种情况下是同一件事。
对于您的第一个问题,您几乎将其钉在头上。 [OptionalField]
基本上允许旧的序列化与较新的定义兼容。 [NonSerialized]
意味着您不会在序列化数据中找到它。
考虑到差异,我无法想象您为什么将这两个字段都放在一个字段上,但我想编译器会抱怨。