【问题标题】:Why aren't fields serializable为什么字段不可序列化
【发布时间】:2013-07-09 18:40:21
【问题描述】:

为什么在 C# 中,字段不能通过 XML 序列化程序进行序列化,而属性却可以?我知道属性实际上是方法,但我不明白为什么这会有所作为。有谁知道这个问题的答案吗?

非常感谢!

【问题讨论】:

  • 为什么你认为字段不可序列化?
  • 很可能该字段的数据类型尚未可序列化,或者该字段不是公共的。
  • 你有一个特定的序列化器吗?像XmlSerializerDataContractJsonSerializerprotobuf-net 或其他什么?答案取决于他们的实现和设计,他们希望包含字段、属性、索引器或任何他们想要的用法
  • stackoverflow.com/questions/653536/… 上的一个答案表明了这一点(对不起,我在手机上,没有“分享”链接)但我找不到任何信息
  • @ZacharyKniebel:只有一个答案声称这一点:stackoverflow.com/a/653543/572644。它有一条评论指出它是不正确的。

标签: c# field serializable


【解决方案1】:

字段是可序列化的:

XML 序列化序列化 公共字段和属性 一个对象, 或方法的参数和返回值,放入符合 到特定的 XML 模式定义语言 (XSD) 文档。 XML 序列化导致具有公共属性的强类型类和 转换为 XML 的字段。 System.Xml.Serialization 包含序列化所需的类 和反序列化 XML。

来自MSDN

【讨论】:

  • 感谢您的帮助。最初我没有意识到,什么是可序列化的和不可序列化的可能取决于序列化的类型
【解决方案2】:

字段是可序列化的。事实上,所有字段默认都是序列化的,除非你用NonSerialized 属性标记它们。

如果说 XML 序列化,那么只有公共字段会被序列化,因为 XML 序列化只序列化对象的公共接口。

【讨论】:

  • 非常感谢!这说明了很多。
猜你喜欢
  • 2016-02-12
  • 2010-12-11
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 2014-09-12
相关资源
最近更新 更多