プロジェクトにはいくつかのセットアップ クラスがあり、いくつかの .config ファイルから 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] を使用して、セットアップの読み取りと書き込みのパフォーマンスを最適化しています。そして、ここに私の問題があります:コレクションを使用して、CA-警告「配列を使用しないでください」を回避しています。SubSetups のセッターを公開すると、CA-Warning CA2227「コレクションのセッターを公開しないでください」が表示されます。プロパティ SubSetups のセッターをプライベートにすると (コード サンプルのように)、生成されたシリアライザーでエラーが発生します。メソッド "GenerateSerializer" (私たちのツールで呼び出されます) コードには次のような行があります。
if (o.SubSetups == null) o.SubSetups = new Collection<SubSetupXml>();
セッターをプライベートにすると、シリアライザーのビルド中に CS0200 "プロパティ サブセットアップを割り当てることができません" が表示されます。CA警告を抑制せずに、生成されたシリアライザーで正しいセットアップを行う方法を知っている人はいますか?