为什么不是我的公共属性由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
其他可能无法序列化的原因:
readonly
的域) [DefaultValue]
属性,并且具有该值 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?