Dot-Net
帶有私有設置器的 XmlSerializer 和 Collection 屬性
說我有一個像這樣的簡單課程
[Serializeable] public class MyClass { public MyClass() { this.MyCollection = new List<int>(); } public List<int> MyCollection { get; private set;} }如果我嘗試使用 XmlSerializer 對其進行反序列化,則會收到一條錯誤消息,指出 MyCollection 是只讀的,無法分配給它。但是我不想公開設置器,因為如果類的使用者分配給它,這可能會導致各種問題。FxCop 正確地警告這一點:集合屬性應該是只讀的
然而,在社區頁面底部添加的內容是這樣的:
XmlSerializer 了解只讀集合 Collection 屬性不必是讀寫的,XmlSerializer 也可以正確序列化和反序列化內容。XmlSerializer 將在實現 ICollection 或 IEnumerable 的集合屬性上查找名為 Add 的方法,並在反序列化所有者類型的實例時使用該方法填充集合。
然而,情況似乎並非如此(因為我得到了 InvalidOperationException)。我能做什麼來遵守保持屬性設置器私有的最佳實踐,同時仍然允許我使用 XmlSerializer?
您的私人二傳手導致了這個問題。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; } } }