データ モデルで XML シリアル化を使用する簡単なサンプルを次に示します。using System.Xml.Serialization;
ファイルの先頭に名前空間のインポート行があることを確認してください。
保存/ロードするデータを単純なクラスとして宣言します。たとえば、次のようになります。
public class SaveData
{
public string CharacterName { get; set; }
public int Level { get; set; }
public int Experience { get; set; }
}
保存する場合は、そのデータ モデルを構築します。
SaveData saveState = new SaveData()
{
CharacterName = myCharacter.Name,
Level = myCharacter.Level,
Experience = myCharacter.Experience
};
ファイルに保存するには、XmlSerializer
クラスを使用してファイルへのストリームを開き、次のようにシリアル化します。
public void SaveStateToFile(SaveData state)
{
XmlSerializer serializer = new XmlSerializer(typeof(SaveData));
using (TextWriter writeFileStream = new StreamWriter(@"C:\savefile.xml"))
{
serializer.Serialize(writeFileStream, state);
}
}
これにより、たとえば次の内容の xml ファイルが作成されます。
<?xml version="1.0" encoding="utf-8"?>
<SaveData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CharacterName>John</CharacterName>
<Level>10</Level>
<Experience>9001</Experience>
</SaveData>
したがって、必要に応じて編集するのは非常に簡単です。データを再度ロードするには:
public SaveData LoadStateFromFile()
{
XmlSerializer serializer = new XmlSerializer(typeof(SaveData));
using (FileStream readFileStream = new FileStream(@"C:\savefile.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
{
return (SaveData)serializer.Deserialize(readFileStream);
}
}
これにより、タイプセーフなデータモデルが得られ、必要に応じて GUI を再バインドできます。
SaveData loadedData = LoadStateFromFile();
Console.WriteLine(loadedData.CharacterName); //John
Console.WriteLine(loadedData.Level); //10
Console.WriteLine(loadedData.Experience); //9001
Label1.Text = "Character Name: " + loadedData.CharacterName;
Label2.Text = "Level: " + loadedData.Level;
Label3.Text = "Exp: " + loadedData.Experience;