说我有一个像这样的简单班级
[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)。我该怎么做才能遵循使属性设置程序保持私有的最佳实践,同时仍然允许我使用XmlSerializer?
最佳答案
您的私人安装员正在引起此问题。 XmlSerializer类可以与下面给出的类一起正常工作。 XmlSerializer类是在引入私有设置程序之前发明的,因此在使用反射方式扫描类类型时,它可能无法正确检查。也许您应该将此错误报告给Microsoft。
public class MyClass
{
private List<int> _myCollection;
public MyClass()
{
_myCollection = new List<int>();
}
public List<int> MyCollection
{
get
{
return this._myCollection;
}
}
}
关于.net - XmlSerializer和具有私有(private)设置程序的Collection属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/891449/