将"NonSerializedAttribute"设置为"自动属性"

Axo*_*onn 19 c#

这不能在C#中完成.有办法吗?

...

,如果我的小双关语不被理解,我的意思是:我怎样才能将C#中的属性标记为NonSerialized?当然,当属性包含逻辑时,很自然地无法执行它,但是自动属性是可序列化的,因此,我希望有一些方法可以阻止它们的序列化.

Ema*_*eco 8

  [NonSerialized]
  public string MyProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)

是一个错误

  [XmlIgnore]
  public string MyProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)

不是错误

NonSerialized指示不应序列化可序列化类的字段.

XmlIgnore指示XmlSerializer的Serialize方法不要序列化公共字段或公共读/写属性值

所以,如果你问

我希望有一些方法可以阻止他们的序列化.

答案是的,如果你正在使用XmlSerializer


Nig*_*ler 5

编辑*: 自动实现属性由您实际无法访问的匿名字段支持,属性设计为由基于反射的机制控制.这些字段不能被反射机制引用(因为它们是匿名的).此编译器功能需要对自动属性的生成进行大量更改...还需要编译器将自动属性视为字段,以便将字段属性标记到其上.

要回答问题的更基本部分 - 您的观点是自动属性是序列化的,因此应该有一种方法来控制它们的序列化.你是对的 - 但是自动属性是一种速记,从来没有设计为你提供充分的灵活性,而是让你在需要的时候以"漫长"的方式轻松扩展它们的功能.

  • 我在答案的正文中添加了更多详细信息.


jam*_*eff 5

对于事件,您可以使用[field:NonSerialized],但对于自动属性,这不起作用.看起来它也是处理自动属性的一种非常合理的方式,但由于某种原因它似乎没有被实现.