一尘不染

XmlSerializer为什么不对我的公共财产进行序列化?

c#

这是我多年来苦苦挣扎的工作,所以我以为我会在某个地方记录下来。(提出和回答问题的道歉。)

(C#.net 2.0)我有一个正在由XmlSerializer进行序列化的类,我添加了一个新的公共属性,但是该属性未包含在输出XML中。

我在任何地方都找不到文档,但公共属性必须有一个集合以及要序列化的获取!我猜这是因为它假设如果要序列化,那么您将从同一个文件中反序列化,因此仅序列化同时具有set和get的属性。


阅读 498

收藏
2020-05-19

共1个答案

一尘不染

如前所述,大多数属性必须同时具有getter和setter;主要的例外是列表-例如:

private readonly List<Foo> bar = new List<Foo>();
public List<Foo> Bar {get { return bar; } } // works fine

会很好的工作;但是,如果XmlSerializer 找到 传教士-它要求它是公开的;以下将 无法 正常工作:

public List<Foo> Bar {get; private set;} // FAIL

它可能无法序列化的其他原因:

  • 它与get和set(或readonly用于字段)不是公共的
  • 它具有一个[DefaultValue]属性,并且具有该值
  • 它有一个bool ShouldSerializeFoo()返回false 的公共方法
  • 它具有一个bool FooSpecified {get;set;}返回false 的公共属性或字段
  • 它被标记 [XmlIgnore]
  • 它被标记 [Obsolete]

这些都会导致它无法序列化

2020-05-19