我们的项目中有一些设置类,它们使用来自一些 .config-Files 的 XmlSerializer 进行序列化/反序列化。在其中一些设置类中,我们有如下子设置的集合:
using System;
using System.Collections.ObjectModel;
using System.Xml.Serialization;
namespace Datev.Framework.Shared.Actions.Setup
{
[Serializable]
[XmlSerializerAssembly]
[XmlRoot("setup")]
public class SetupXml
{
public SetupXml()
{
SubSetups = new Collection<SubSetupXml>();
}
[XmlArray("subSetups")]
[XmlArrayItem("subSetup")]
public Collection<SubSetupXml> SubSetups { get; private set; }
}
[Serializable]
public class SubSetupXml
{
[XmlElement("someValue")]
public string SomeValue { get; set; }
}
}
我们使用属性 [XmlSerializerAssembly] 来获得读取和写入设置的最佳性能。这是我的问题:我们正在使用 Collection 来避免 CA 警告“不要使用数组”。当我们公开 SubSetups 的设置器时,我们会收到 CA-Warning CA2227“不要公开集合的设置器”。如果我们将属性 SubSetups 的设置器设为私有(就像在代码示例中一样),我们将在生成的序列化程序中得到一个错误。方法“GenerateSerializer”(在我们的工具中调用)代码有这样一行:
if (o.SubSetups == null) o.SubSetups = new Collection<SubSetupXml>();
如果我们将设置器设为私有,我们将在构建序列化器期间获得 CS0200“无法分配属性子设置”。有谁知道如何在不抑制 CA 警告的情况下使用生成的序列化程序进行正确设置?