Ibr*_*taz 6 .net c# nonserializedattribute
我在transcender上遇到了这个问题:
如果在反序列化期间不需要它的值,您应该对字段应用什么?
我= [NonSerialized],ANSWER = [OptionalField]
我的直觉反应是NonSerialised,但Transcender说我错了.就[非自动化]属性而言,我很清楚要注意什么,但我仍然希望这一点得到澄清.
据我所知,前者与同一程序集的较新版本和旧版本之间的版本冲突有关系.后者更关心的是没有序列化字段FULLSTOP.还有什么可以将这两者分开吗?MSDN并没有真正说明这一点,因为它们都使用XMLIgnoreAttribute在BinaryFormatters和SoapFormatter上使用XMLFormatter.
我的第二个问题是你可以混合搭配两个属性中的任何一个吗?我还没有使用它们.
只是抛出这个,但我的回答是否与[OnDeserialized]和IdeserilizationCallback接口的实现方式有关?
更新:
我知道可选字段属性不会序列化数据成员持有的值,但NonSerialized甚至不会序列化数据成员或其值.
这两个属性用于序列化方程的相反侧.
当你使用时[NonSerialized],你会说"这个字段根本不应该被序列化" - 所以它更像是一个"节省时间"属性.基本上,您说该字段对于对象的序列化状态无关紧要.
[OptionalField]另一方面,当您使用时,您仍然要对该字段进行序列化.但是,如果在读取时缺少该字段(当流被反序列化为对象时),则不会引发异常.此属性实际上旨在允许您向现有可序列化类型添加新字段,而不会破坏兼容性.对象的旧版本(缺少该字段)将正常反序列化.
| 归档时间: |
|
| 查看次数: |
4361 次 |
| 最近记录: |