2

カスタム シリアル化に頼らずに、カスタム オブジェクトの ArrayList をアプリケーション ユーザー設定に保存することは可能ですか?

たとえば、パブリックな get/set プロパティとプライベート バッキング フィールドのみを含む基本的なデータ クラスがあるとします。

[Serializable]
class SimpleClass()
{
  ...   
}

次のコードを実行してからアプリケーションを再起動すると、MyList という名前の ArrayList 設定が常に null になります。つまり、保存されませんでした。

if (Properties.Settings.Default.MyList==null)
{
    Properties.Settings.Default.MyList=new ArrayList();
}

Properties.Settings.Default.MyList.Add(new SimpleClass(DateTime.Now.ToString()));

Properties.Settings.Default.Save();

ArrayList は型指定されていないことに気付きました。オブジェクトのコレクションを保持します。ただし、各オブジェクトで GetType() を使用して実際の型を判断するのは簡単です。これにより、シリアル化が可能になるはずですよね?

また、カスタムのシリアル化を実行してこれを回避する方法も知っています。単純な状況でははるかに便利なため、これが機能していないように見えるのはただの苦痛です。

何か案は?

4

1 に答える 1

1

XML シリアル化を使用している場合は、XmlArrayItem 属性を使用できます。

 [XmlArray("Items")]
 [XmlArrayItem("A.Thing",typeof(Thing))]
 [XmlArrayItem("A.Different.Thing",typeof(Whatzit))]
 public System.Collections.ArrayList List;

これには、コンパイル時に ArrayList に存在する可能性のあるさまざまな型を知っている必要があります。

于 2009-03-28T22:57:50.460 に答える