- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 transcender 上遇到了这个问题:
如果在反序列化过程中不需要某个字段的值,您应该对其应用什么?
Me = [NonSerialized], ANSWER = [OptionalField]
我的直觉 react 是非序列化,但 Transcender 说我错了。就 [Nonseralized] 属性而言,我很清楚要注意什么,但我仍然真的很想把它弄清楚。
据我所知,前者与同一程序集的新旧版本之间的版本控制冲突有关。后者更关心不序列化字段 FULLSTOP。还有什么可以使这两者区分开来的吗? MSDN 对此并没有说太多,因为它们都用于 BinaryFormatters 和 SoapFormatter 以及使用 XMLIgnoreAttribute 的 XMLFormatter。
我的第二个问题是,您可以混合搭配这两个属性中的任何一个吗?我还没有使用它们。
只是把这个扔在那里,但我的回答是否与 [OnDeserialized] 和 IdeserilizationCallback 接口(interface)的实现方式有关?
更新:
我知道可选字段属性不会序列化数据成员持有的值,但 NonSerialized 甚至不会序列化数据成员或其值。
最佳答案
这两个属性用于序列化等式的相反两边。
当您使用 [NonSerialized]
时,您是在说“这个字段根本不应该被序列化”——所以它更像是一个“节省时间”的属性。基本上,您是说该字段对于对象的序列化状态无关紧要。
另一方面,当您使用[OptionalField]
时,您仍将序列化该字段。但是,如果该字段在读取时间(当流被反序列化为对象时)缺失,则不会引发异常。该属性的真正目的是让您可以在不破坏兼容性的情况下向现有的可序列化类型添加新字段。对象的旧版本(缺少该字段)将正常反序列化。
关于c# - [OptionalField] 和 [NonSerialized] 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2586507/
据我所知,当我反序列化缺少新成员的类的旧版本时,我必须使用 [OptionalField] 属性装饰类的新版本中的新成员。 但是,在序列化类之后添加了 InnerTranslator 属性时,下面的代
似乎OptionalFieldAttribute不再需要(如果有的话)使用 BinaryFormatter 进行序列化。 用example from codeguru在 Visual Studio 2
我在 transcender 上遇到了这个问题: 如果在反序列化过程中不需要某个字段的值,您应该对其应用什么? Me = [NonSerialized], ANSWER = [OptionalFiel
我是一名优秀的程序员,十分优秀!