gpt4 book ai didi

.net - 带有私有(private) setter 的 XmlSerializer 和 Collection 属性

转载 作者:行者123 更新时间:2023-12-03 22:29:29 25 4
gpt4 key购买 nike

说我有一个像这样的简单类(class)

[Serializeable]
public class MyClass
{
public MyClass()
{
this.MyCollection = new List<int>();
}


public List<int> MyCollection { get; private set;}
}

如果我尝试使用 XmlSerializer 对其进行反序列化,则会收到一条错误消息,指出 MyCollection 是只读的,无法分配给它。但是我不想公开 setter ,因为如果类的用户分配给它,这可能会导致各种问题。 FxCop 对此提出了正确的警告: Collection properties should be read only

然而,在社区页面底部添加的内容是这样的:

XmlSerializer understands read-only collections Collection properties do not have to be read-write for the XmlSerializer to serialize and deserialize the contents correctly. The XmlSerializer will look for a method called Add on collection properties that implement ICollection or IEnumerable, and use that to populate the collection when deserializing an instance of the owner type.



然而,情况似乎并非如此(因为我得到了 InvalidOperationException)。我能做什么来遵守保持属性 setter 私有(private)的最佳实践,同时仍然允许我使用 XmlSerializer?

最佳答案

您的私有(private)二传手导致了这个问题。 XmlSerializer 类将与我在下面给出的类一起正常工作。 XmlSerializer 类是在引入私有(private) setter 之前发明的,因此在使用反射扫描类类型时可能无法正确检查。也许您应该将此作为错误报告给 Microsoft。

public class MyClass
{
private List<int> _myCollection;

public MyClass()
{
_myCollection = new List<int>();
}

public List<int> MyCollection
{
get
{
return this._myCollection;
}
}
}

关于.net - 带有私有(private) setter 的 XmlSerializer 和 Collection 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/891449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com