XmlSerializer为什么不对我的公共财产进行序列化?
这是我多年来苦苦挣扎的工作,所以我以为我会在某个地方记录下来。(提出和回答问题的道歉。)
(C#.net 2.0)我有一个正在由XmlSerializer进行序列化的类,我添加了一个新的公共属性,但是该属性未包含在输出XML中。
我在任何地方都找不到文档,但公共属性必须有一个集合以及要序列化的获取!我猜这是因为它假设如果要序列化,那么您将从同一个文件中反序列化,因此仅序列化同时具有set和get的属性。
回答:
如前所述,大多数属性必须同时具有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]
这些都会导致它无法序列化
以上是 XmlSerializer为什么不对我的公共财产进行序列化? 的全部内容, 来源链接: utcz.com/qa/418071.html