这是我多年来一直在努力的一个,所以以为我会在某个地方记录.(对提问和回答问题表示歉意.)
(C#.net 2.0)我有一个由XmlSerializer序列化的类,我添加了一个新的公共属性,但它没有包含在输出XML中.
在我找不到的文档中没有提到它,但公共属性必须有一个集合以及一个序列化!我想这是因为它假设如果你要序列化然后你想要从同一个文件反序列化,所以只序列化同时具有set和get的属性.
如上所述,大多数属性必须同时具有getter和setter; 这个的主要例外是列表 - 例如:
private readonly Listbar = new List (); public List Bar {get { return bar; } } // works fine
这将工作正常; 但是,如果XmlSerializer
找到一个二传手 - 它要求它是公开的; 以下将无法正常工作:
public ListBar {get; private set;} // FAIL
其他可能无法序列化的原因:
get和set(或者是readonly
字段)不公开
它有一个[DefaultValue]
属性,并且具有该值
它有一个bool ShouldSerializeFoo()
返回false 的公共方法
它有一个bool FooSpecified {get;set;}
返回false 的公共属性或字段
它被标记了 [XmlIgnore]
它被标记了 [Obsolete]
其中任何一个都会导致它不能序列化
关于getter + setter的观点是在" Xml序列化简介 "页面的第3段中提出的.它实际上是在一个标注框中.不能错过!
介绍到XML的序列化http://www.freeimagehosting.net/uploads/2f04fea2db.png
(与Freeimagehosting.net有点太多的乐趣)
返回null的属性也不会序列化!
如果你不想实现正确的Setter(因为你可能不想反序列化或更改对象值),你可以使用像这样的虚拟设置器set { }
,这样就可以了XMLSerializer
,但如果使用Setter则没有任何反应......
即
public string ID { get { return _item.ID.ToString(); } set { } }