0

.NET フレームワーク (バージョン 2.0) の XML-Serializer を使いたかっただけです。設定をシリアル化および逆シリアル化するメソッドを作成しました。

public static void Save(string filename)
{
    var settings = Settings.Instance;

    if (File.Exists(filename))
        File.Delete(filename);

    using (var stream = File.OpenWrite(filename))
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Settings));
        serializer.Serialize(stream, settings);
    }
}

保存メソッドは非常にうまく機能し、その結果、次の xml ドキュメントを取得します。

<?xml version="1.0"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <EnableHooking>true</EnableHooking>
  <IncludePressedKeys>false</IncludePressedKeys>
  <EnableFastScroll>false</EnableFastScroll>
  <FastScrollingHotKeys>
    <VirtualKeys>Control</VirtualKeys>
    <VirtualKeys>Alt</VirtualKeys>
  </FastScrollingHotKeys>
  <ScrollSpeed>2</ScrollSpeed>
  <FastScrollSpeed>10</FastScrollSpeed>
</Settings>

このドキュメントを逆シリアル化しようとすると、ルート要素が欠落していることを示す例外 XmlException が発生します。XmlRootAttribute を設定しようとし、ファイル名とストリーム位置を確認しようとしました。全て大丈夫。今、私は最終的に、完全に機能する XmlDocument クラスを介してファイルを読み込もうとしました。今、私は本当に何が起こるかわかりません。したがって、Load メソッドを見てみましょう。

public static void Load(string filename)
{
    if (!File.Exists(filename))
        throw new ArgumentException("File not found.", "filename", new FileNotFoundException());

    //works
    var doc = new XmlDocument();
    doc.Load(XmlReader.Create(File.OpenRead(filename)));
    Console.WriteLine(doc.DocumentElement.FirstChild);

    using (var stream = File.OpenRead(filename))
    {
        XmlSerializer serializer = new XmlSerializer(typeof(Settings));
        _instance = serializer.Deserialize(stream) as Settings;
    }
}

うまくいけば、誰もがアイデアを得ました。

4

1 に答える 1