我只想使用.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類讀取加載文件,該類完美地工作。現在我真的不知道會發生什麼。所以你可以看看加載方法:
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;
}
}
希望任何人都有一個想法。
你的Settings類是什麼樣的? –
設置類的確會非常有幫助。當我用前兩個屬性EnableHooking和IncludePressedKeys創建一個小類時,我不會遇到任何錯誤。那麼你的問題是什麼?該代碼似乎工作,但你想要一個不同的解決方案? – Richard
不,我不想要一個不同的解決方案。我得到一個「根元素缺失」xmlexception與這個代碼。 @Richard –