Ror*_*ory 58 .net c# xml-serialization
这是我多年来一直在努力的一个,所以以为我会在某个地方记录.(对提问和回答问题表示歉意.)
(C#.net 2.0)我有一个由XmlSerializer序列化的类,我添加了一个新的公共属性,但它没有包含在输出XML中.
在我找不到的文档中没有提到它,但公共属性必须有一个集合以及一个序列化!我想这是因为它假设如果你要序列化然后你想要从同一个文件反序列化,所以只序列化同时具有set和get的属性.
Mar*_*ell 91
如上所述,大多数属性必须同时具有getter和setter; 这个的主要例外是列表 - 例如:
private readonly List<Foo> bar = new List<Foo>();
public List<Foo> Bar {get { return bar; } } // works fine
Run Code Online (Sandbox Code Playgroud)
这将工作正常; 但是,如果XmlSerializer 找到一个二传手 - 它要求它是公开的; 以下将无法正常工作:
public List<Foo> Bar {get; private set;} // FAIL
Run Code Online (Sandbox Code Playgroud)
其他可能无法序列化的原因:
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有点太多的乐趣)
如果你不想实现正确的Setter(因为你可能不想反序列化或更改对象值),你可以使用像这样的虚拟设置器set { },这样就可以了XMLSerializer,但如果使用Setter则没有任何反应......
即
public string ID { get { return _item.ID.ToString(); } set { } }
Run Code Online (Sandbox Code Playgroud)