トップ回答者
ユーザー設定のXMLクラス作成について

質問
-
皆様お世話になります。
XPpro C#2008で開発をしております。
フォームのレイアウト情報や、フォントなどをXMLファイルに書き出して
復元可能なアプリケーションを作成したいと考えております。XMLを使うにあたりappconfigなどがあることは知っているのですが、
複数のフォームを扱う為、フォームごとにXMLファイルを作成したいと考えております。ここで下記サイトなどを参考にXMLの入出力クラスを作成できたらよいと思っているのですが・・・
http://dobon.net/vb/dotnet/file/xmlserializer.html
public class SampleClass
{
public int Number;
public string Message;
}class MainClass
{
public static void 書き込み()
{
//保存先のファイル名
string fileName = @"C:\test.xml";
//保存するクラス(SampleClass)のインスタンスを作成
SampleClass cls = new SampleClass();
cls.Message = "テストです。";
cls.Number = 123;//XmlSerializerオブジェクトを作成
//書き込むオブジェクトの型を指定する
System.Xml.Serialization.XmlSerializer serializer =
new System.Xml.Serialization.XmlSerializer(
typeof(SampleClass));
//ファイルを開く
System.IO.FileStream fs =
new System.IO.FileStream(fileName,
System.IO.FileMode.Create);
//シリアル化し、XMLファイルに保存する
serializer.Serialize(fs, cls);
//閉じる
fs.Close();
}
public static void 読み込み()
{
//保存元のファイル名
string fileName = @"C:\test.xml";//XmlSerializerオブジェクトの作成
System.Xml.Serialization.XmlSerializer serializer =
new System.Xml.Serialization.XmlSerializer(
typeof(SampleClass));
//ファイルを開く
System.IO.FileStream fs =
new System.IO.FileStream(fileName,
System.IO.FileMode.Open);
//XMLファイルから読み込み、逆シリアル化する
SampleClass cls =
(SampleClass) serializer.Deserialize(fs);
//閉じる
fs.Close();}
}このクラスだと一つのXMLファイルにしか対応できないクラスですが
これをXMLをN個作成したい時に対応できるクラスを作成できたらいいなと思います。
違うXMLを作成したいと思った時に
クラスの内容が変わるのは
ファイルの名前と上記の例だとSampleClassだけが
変わるのでこれに対応したクラスを作成したいのですが、
System.Xml.Serialization.XmlSerializer serializer =
new System.Xml.Serialization.XmlSerializer(typeof(SampleClass));
この部分の記述がtypeof(クラスの型)になっているのでこの部分を
Object型みたいなものに変えられないかと思っているのですが、
何か方法はあるのでしょうか?何か知恵がありましたらご教授いただけると助かります。
回答
-
2つヒントを。
WinFormデザイナでFormのプロパティ「Localizable」をtrueにして生成されるコードをみると参考になりますが、ComponentResourceManager. ApplyResourcesメソッド が使えるかもしれません。そのものを使わなくても似たようなものをご自身で実装するとか。
XmlSerializerの他にも.NET Framework 3.0から提供されているDataContractSerializerクラス があり、特に3.5(SP1でしたっけ?)での拡張で扱いやすくなっています。
実際のところどこまでXMLに外出ししたいのかよくわからないのでこのぐらいのことしか言えません。- 回答としてマーク sk7474 2009年4月22日 9:24
-
イメージしているフォームをFormデザイナで作成し自動生成されるInitializeComponent()の内容については確認されていますでしょうか?
簡単なコントロールなら問題ありませんが、ものによっては初期化の仕方がまちまちで簡単にXMLからロード、では済まされない可能性もあります。
またフォームのイベント処理についてはどのようにお考えでしょうか。
その上でこういった用途にXAMLを使用するのはどうでしょうか?
チュートリアル : Windows フォームでの Windows Presentation Foundation コントロールのホスト- 回答としてマーク sk7474 2009年4月22日 9:24
すべての返信
-
イメージしているフォームをFormデザイナで作成し自動生成されるInitializeComponent()の内容については確認されていますでしょうか?
簡単なコントロールなら問題ありませんが、ものによっては初期化の仕方がまちまちで簡単にXMLからロード、では済まされない可能性もあります。
またフォームのイベント処理についてはどのようにお考えでしょうか。
その上でこういった用途にXAMLを使用するのはどうでしょうか?
チュートリアル : Windows フォームでの Windows Presentation Foundation コントロールのホスト- 回答としてマーク sk7474 2009年4月22日 9:24
-
YuO様、佐祐理様
ご回答ありがとうございました。
佐祐理WPFはまだ使用した機会がないので勉強させていただきます。
>ものによっては初期化の仕方がまちまちで簡単にXMLからロード、では済まされない可能性もあります。
フォームがロードされた時にXMLの内容を確認して修正しようかと単純に考えておりました。
もう一度再確認をしてみます。
- System.Type (typeof演算子の戻り値の型) を引数にとってしまう
- 型部分をGenericを使って受け取るようにする
http://www.codeproject.com/KB/XML/xml_serializationasp.aspx
このサイトのようなことですかね?
Genericクラス、正直List<T>しか使ったことないので、MSDNを読んでみます^^;
皆様ありがとうございました。- 編集済み 大久保直美Microsoft employee 2009年4月8日 7:36 タグ乱れ
-
2つヒントを。
WinFormデザイナでFormのプロパティ「Localizable」をtrueにして生成されるコードをみると参考になりますが、ComponentResourceManager. ApplyResourcesメソッド が使えるかもしれません。そのものを使わなくても似たようなものをご自身で実装するとか。
XmlSerializerの他にも.NET Framework 3.0から提供されているDataContractSerializerクラス があり、特に3.5(SP1でしたっけ?)での拡張で扱いやすくなっています。
実際のところどこまでXMLに外出ししたいのかよくわからないのでこのぐらいのことしか言えません。- 回答としてマーク sk7474 2009年4月22日 9:24