Ray*_*Ray 14 .net xml-serialization
说我有一个像这样的简单课程
[Serializeable]
public class MyClass
{
public MyClass()
{
this.MyCollection = new List<int>();
}
public List<int> MyCollection { get; private set;}
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用XmlSerializer反序列化,我会收到一条错误消息,指出MyCollection是只读的,无法分配给.但是我不想公开setter,因为如果类的用户分配了它会导致各种问题.FxCop正确地警告:收集属性应该是只读的
但是在社区页面底部添加的内容是这样的:
XmlSerializer了解只读集合对于XmlSerializer,集合属性不必是可读写的,以便正确地序列化和反序列化内容.XmlSerializer将在实现ICollection或IEnumerable的集合属性上查找名为Add的方法,并在反序列化所有者类型的实例时使用该方法填充集合.
然而,它似乎并非如此(因为我得到InvalidOperationException).我能做什么遵循保持属性设置器私有的最佳实践,同时仍允许我使用XmlSerializer?
Mar*_*own 14
你的私人二传手造成了这个问题.XmlSerializer类可以正常使用我在下面给出的类.XmlSerializer类是在引入私有setter之前发明的,因此在使用反射扫描类类型时可能无法正确检查.也许您应该将此报告给Microsoft作为错误.
public class MyClass
{
private List<int> _myCollection;
public MyClass()
{
_myCollection = new List<int>();
}
public List<int> MyCollection
{
get
{
return this._myCollection;
}
}
}
Run Code Online (Sandbox Code Playgroud)