为什么不是我的公共属性由XmlSerializer序列化?

这是我奋斗了一段时间,所以认为我会记录在某个地方。 (请求和回答问题的道歉。)

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

在我能找到的任何文档中都没有提到它,但公共属性必须有一个集合以及一个可序列化的集合! 我想这是因为它假设如果你要序列化,那么你会想从同一个文件反序列化,所以只能序列化具有set和get的属性。


如前所述,大多数房产都必须同时拥有一个吸气者和二流者; 这个列表的主要例外是列表 - 例如:

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的公共bool ShouldSerializeFoo()方法
  • 它有一个公共bool FooSpecified {get;set;}属性或返回false的字段
  • 它被标记为[XmlIgnore]
  • 它被标记为[Obsolete]
  • 任何这些都会导致它不能序列化


    关于getter + setter的一点是在“Intro to Xml Serialization”页面的第3段中进行的。 它实际上是在一个呼出框中。 不能错过!

    XML序列化简介http://www.freeimagehosting.net/uploads/2f04fea2db.png

    (与Freeimagehosting.net有点太多乐趣)


    如果你不想实现适当的Setters(因为也许你不想反序列化或更改对象的值),那么你可以使用像这样的伪setter set { } ,这样XMLSerializer可以工作,但是如果你使用二传手...

    public string ID { get { return _item.ID.ToString(); } set { } }
    
    链接地址: http://www.djcxy.com/p/65133.html

    上一篇: Why isn't my public property serialized by the XmlSerializer?

    下一篇: Serialize a nullable int