私人二传手
问题描述:
的XmlSerializer和集合属性说我有一个简单的类,像这样私人二传手
[Serializeable]
public class MyClass
{
public MyClass()
{
this.MyCollection = new List<int>();
}
public List<int> MyCollection { get; private set;}
}
如果我尝试反序列化这个XmlSerializer的使用,我得到一个错误,指出MyCollection的是只读的,不能被分配到。不过,我不希望公开让二传手,因为如果这个班的使用者给它分配的话,这会导致各种各样的问题。 FxCop的正确警告说,不要这样:Collection properties should be read only
但是在社区页面的底部添加的内容是这样的:
XmlSerializer的理解只读 集合集合 属性没有被 读 - 写入XmlSerializer以 正确地序列化并反序列化内容 。 XmlSerializer的会看 一个名为添加上收集实现ICollection的 或IEnumerable的 特性的方法,并用它来 填充集合时 反序列化的所有者 类型的实例。
但它似乎并不是这样(因为我得到InvalidOperationException)。我能做什么遵循保持属性setter为private的最佳做法,同时仍允许使用XmlSerializer?
答
您的私人二传手导致了这个问题。 XmlSerializer类可以在我下面给出的类中正常工作。 XmlSerializer类是在引入私有setter之前发明的,所以当它使用反射扫描类类型时可能不会正确地检查它。也许你应该向微软报告这个bug。
public class MyClass
{
private List<int> _myCollection;
public MyClass()
{
_myCollection = new List<int>();
}
public List<int> MyCollection
{
get
{
return this._myCollection;
}
}
}
干杯,固定它。 – Ray 2009-05-21 20:42:51