gpt4 book ai didi

c# - [OptionalField] 和 [NonSerialized] 有什么区别

转载 作者:太空狗 更新时间:2023-10-29 21:31:07 26 4
gpt4 key购买 nike

我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com