Matthew Watson が推奨したように、良い解決策は XML とシリアライゼーションを使用することです。
プロジェクトで xml を作成し、そのプロパティが [ビルド アクション] に対して [なし] に設定されていること、[出力ディレクトリにコピー] に対して [常にコピー] または [新しい場合はコピー] に設定されていることを確認します。
xml ファイルの例を次に示します。
<?xml version="1.0" encoding="utf-8" ?>
<ArrayOfPlayer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Player>
<Name>Jack</Name>
<WinCount>15</WinCount>
<PlayCount>37</PlayCount>
</Player>
<Player>
<Name>John</Name>
<WinCount>12</WinCount>
<PlayCount>27</PlayCount>
</Player>
</ArrayOfPlayer>
次に、この XML を使用して、それをプレイヤーのリストに逆シリアル化します。以下のシリアル化用のヘルパー クラスがあります。次に示すように、XML ファイルの内容を読み取り、それを Deserialize メソッドに渡します。Players リストを保存する場合は、リストを Serializer に渡し、ファイルに保存し直します。
シリアライザ ヘルパー クラス:
public static class Serializer
{
public static string SerializeObject(object objectToSerialize)
{
XmlSerializer x = new XmlSerializer(objectToSerialize.GetType());
StringWriter writer = new StringWriter();
x.Serialize(writer, objectToSerialize);
return writer.ToString();
}
public static T DeserializeObject<T>(string serializedObject)
{
XmlSerializer xs = new XmlSerializer(typeof(T));
StringReader reader = new StringReader(serializedObject);
return (T)xs.Deserialize(reader);
}
}
クラスを使用して逆シリアル化します。
//Change this as needed to read your XML file.
string playersXML = File.ReadAllText(@"./Players.xml");
List<Player> players = Serializer.DeserializeObject<List<Player>>(playersXML);
クラスを使用して、リストをシリアル化して保存します。
string newPlayersXML = Serializer.SerializeObject(players);
//Change this as needed to point to the XML location
File.WriteAllText(@"./Players.xml", newPlayersXML);
そして最後に Player クラス:
public class Player
{
public string Name { get; set; }
public int WinCount { get; set; }
public int PlayCount { get; set; }
}
コードで必要に応じて Player クラスとリストを使用します。