为什么[NonSerialized]不能处理自动实现的属性?

Ste*_*nov 6 .net serialization .net-3.5 nonserializedattribute

[Serializable]
class MyClass
{
    [NonSerialized] int Foo { get; set; } // error
    [NonSerialized] int bar; // ok
}
Run Code Online (Sandbox Code Playgroud)

为什么不允许这样做?

我知道诸如此类的解决方法

  • 实现ISerializable
  • 切换到XmlSerializer/XmlIgnore
  • 切换到手动实现的属性

问题是具体为什么 [NonSerialized]不允许在本地使用,但允许在字段上使用.

Tho*_*que 12

属性实际上是方法,它们不是由二进制序列化过程序列化的.这是序列化的字段.所以NonSerialized在字段上指定它才有意义.

  • 实际上,它们实际上是一对方法.但是支持字段仅隐含于自动属性,并且可能根本不存在于普通属性.无论如何,当引入`NonSerialized`属性时,自动属性不存在,所以他们不能考虑这个因素 (2认同)