最近、C#アプリケーションの設定に慣れてきましたが、かっこいいようです。
カスタムオブジェクトのリストを保存する方法を探していましたが、方法が見つかりませんでした。
実際に int [] を格納するための投稿を見ましたが、この問題には役立ちませんでした。
問題に適したものにするために、そのソリューションの構成を変更しようとしました。そのXML構成ファイルは次のとおりです。
<Setting Name="SomeTestSetting" Type="System.Int32[]" Scope="User">
<Value Profile="(Default)" />
</Setting>
以下のtype属性で引用されているようにオブジェクトをアドレス指定しようとしましたが、オブジェクトを認識しないため役に立ちませんでした...「type = List」と「type = "Tuple []」を試しました
これらのオプションはどちらも役に立ちませんでした。
私は次のようなクラスを持っています:
class Tuple
{
public Tuple()
{
this.font = new Font ("Microsoft Sans Serif",8);
this.backgroundcolor_color = Color.White;
this.foregroundcolor_color = Color.Black;
}
public string log { get; set; }
public Font font { get ; set; }
public String fontName { get; set; }
public string foregroundcolor { get; set; }
public Color foregroundcolor_color { get; set; }
public string backgroundcolor { get; set; }
public Color backgroundcolor_color { get; set; }
public Boolean notification { get; set; }
}
そして、アプリケーション設定にリストを保存したいと思います。
それで、この目的を達成する方法はありますか。
前もって感謝します。
乾杯、
BinaryFormatter を使用してタプルのリストをバイト配列としてシリアル化し、Base64(非常に効率的な方法として)を使用してバイト配列をstring
として格納できます。
まず、クラスをそのようなものに変更します(ヒント: [SerializableAttribute]
):
[Serializable()]
public class Tuple
{
public Tuple()
{
this.font = new Font("Microsoft Sans Serif", 8);
//....
}
tuples
という名前の設定とstring
のタイプにプロパティを追加します。
次に、2つの方法を使用して、タプルの汎用リストをロードおよび保存できます(List<Tuple>
):
void SaveTuples(List<Tuple> tuples)
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, tuples);
ms.Position = 0;
byte[] buffer = new byte[(int)ms.Length];
ms.Read(buffer, 0, buffer.Length);
Properties.Settings.Default.tuples = Convert.ToBase64String(buffer);
Properties.Settings.Default.Save();
}
}
List<Tuple> LoadTuples()
{
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(Properties.Settings.Default.tuples)))
{
BinaryFormatter bf = new BinaryFormatter();
return (List<Tuple>)bf.Deserialize(ms);
}
}
例:
List<Tuple> list = new List<Tuple>();
list.Add(new Tuple());
list.Add(new Tuple());
list.Add(new Tuple());
list.Add(new Tuple());
list.Add(new Tuple());
// save list
SaveTuples(list);
// load list
list = LoadTuples();
null
、空の文字列、例外チェックはあなたに任せます。
あなたが何をしたいのかは、アプリケーションの設定で行うのが最善かどうかわかりません。調べたいのはXDocumentで、必要な値を別の構成ファイルに保存します。
カスタムタイプを記述して、.config
ファイルを拡張できます。ただし、これは、確認の既存のセクションに独自の任意のタイプを格納するのではなく、カスタムセクションを追加します。
カスタム構成タイプは、子ノードに完全にカスタムロジックを提供することにより、XMLシリアル化データを保持できます。これは構成システムを悪用していると私は主張します。これは、完全な状態ではなく設定を保存するためのものです。
これが必要な場合は、ドキュメントに ConfigurationSection
の簡単な例があります。