gpt4 book ai didi

c# - 为什么我的公共(public)属性没有被 XmlSerializer 序列化?

转载 作者:IT王子 更新时间:2023-10-29 03:46:52 26 4
gpt4 key购买 nike

这是一个我挣扎了多年的问题,所以我想我应该在某个地方记录下来。 (抱歉提出和回答问题。)

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

在我能找到的任何地方的文档中都没有提到它,但是公共(public)属性必须有一个 set 以及一个 get 才能被序列化!我猜这是因为它假设如果您要序列化,那么您将希望从同一个文件反序列化,因此只序列化同时具有 set 和 get 的属性。

最佳答案

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

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

这会很好用;但是,如果 XmlSerializer 找到 setter - 它要求它是公开的;以下将工作:

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

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

  • 它不通过 get 和 set 公开(或者对于字段是 readonly)
  • 它有一个[DefaultValue]属性,并且是那个值
  • 它有一个返回 false 的公共(public) bool ShouldSerializeFoo() 方法
  • 它有一个返回 false 的公共(public) bool FooSpecified {get;set;} 属性或字段
  • 它被标记为[XmlIgnore]
  • 它被标记为[Obsolete]

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

关于c# - 为什么我的公共(public)属性没有被 XmlSerializer 序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/575432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com