- 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/
这个问题在这里已经有了答案: Why do I need "field:" in my attribute declaration "[field:NonSerialized]"? (4 个答案)
我想弄清楚如何为一个值创建一个属性 [NonSerialized] 看一下这个 : using System; using System.Text.Json; class Test { pu
[Serializable] class MyClass { [NonSerialized] int Foo { get; set; } // error [NonSerialized
我的类中有一个内联初始化的 [Nonserialized] 字段: [NonSerialized] private bool running = true; 但是,在反序列化一个对象后,我运行了 ==
这些字段是否设置为默认值,就像创建新实例时一样?我可以创建自定义代码以在反序列化时将这些字段设置为新值吗? 最佳答案 注意:所有这些都是特定于 BinaryFormatter 的: 默认情况下,它们会
我有一个 IPC 服务器运行着一些非常简单的界面,目前工作正常。接口(interface)本身非常简单,只包含 4 个方法。 (RemoteCall 方法是 SingleTone): [Seriali
我有一个使用二进制序列化深度克隆的数据对象。此数据对象支持属性更改事件,例如 PriceChanged。 假设我将处理程序附加到 PriceChanged。当代码尝试序列化 PriceChanged
我在 transcender 上遇到了这个问题: 如果在反序列化过程中不需要某个字段的值,您应该对其应用什么? Me = [NonSerialized], ANSWER = [OptionalFiel
我正在查看我正在处理的项目中的一些现有代码,我发现了一个实现为: public class ThingOne { private int A; private int B; [
我在任何地方都找不到列为 C# 关键字的“字段”。有谁知道这件事的背景吗? 最佳答案 这是必要的,例如,如果您将事件标记为不可序列化。它指定了该属性适用的目标。 它是属性目标语法的一部分。来自spec
我们正在从 XML 序列化/反序列化一个类,但该类中有我们想要排除的属性和字段。 System.NonSerialized 和 System.Xml.Serialization.XmlIgnore 属
如果我尝试使用 System.Runtime.Serialization.Json.DataContractJsonSerializer 序列化以下 ClassToSerialize 类的对象 [Da
我是一名优秀的程序员,十分优秀!