说我有一个像这样的简单班级

[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/

10-12 05:44