これ、よくあるケースよねと思っていたら、ちゃんと先駆者がいたわ。以下ね。
ここはよくお世話になるんだけど、詳しすぎて自分の知りたいとこを探す羽目になるのが唯一の難点よね。今はまず使わない古いデータも入っているし。
なので、わたしの知りたいところ……要は読み書きしたいデータを簡単にXMLでやりとりするってとこだけを抜粋しようと思うの。
わたしが実現したいのは以下の点だけ。
これを元に上のページを見ると、とても単純なものだけですみそうね。
それから、コードはこれかな?
まず、保存用のクラスを作るわ。
public class SampleClass { public int Number; public string Message; }
メインクラスの方のコードはこっちね。
//保存先のファイル名 string fileName = "sample.xml";
//保存するクラス(SampleClass)のインスタンスを作成 SampleClass obj = new SampleClass(); obj.Message = "テストです。"; obj.Number = 123;
//XmlSerializerオブジェクトを作成 //オブジェクトの型を指定する System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(SampleClass)); //書き込むファイルを開く(UTF-8 BOM無し) System.IO.StreamWriter sw = new System.IO.StreamWriter( fileName, false, new System.Text.UTF8Encoding(false)); //シリアル化し、XMLファイルに保存する serializer.Serialize(sw, obj); //ファイルを閉じる sw.Close();
で、生成されたファイルは、こんな感じになったわね。
<?xml version="1.0" encoding="utf-8"?> <SampleClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Number>123</Number> <Message>テストです。</Message> </SampleClass>
数字はちゃんと自動で数値化されるんだ……。
うん、これで使えそうね。
で、このファイルを読み込むには、こうやるの。
// 読み込み
System.Xml.Serialization.XmlSerializer serializer2 = new System.Xml.Serialization.XmlSerializer(typeof(SampleClass));
//読み込むファイルを開く System.IO.StreamReader sr = new System.IO.StreamReader( fileName, new System.Text.UTF8Encoding(false)); //XMLファイルから読み込み、逆シリアル化する SampleClass obj2 = (SampleClass)serializer2.Deserialize(sr); //ファイルを閉じる sr.Close();
わたしの環境だとこの後、obj2.Numberとobj2.Message をコンソールに出してみたりしてみたわ。ちやんといけるみたいね。
Booleanやintも自動変換してくれるし便利なんだけど、ひとつだけ。
うん、ちょっとそういうクセには要注意かも。