3
如果我看到這個XML:反序列化異常處理
<?xml version="1.0"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FontPath>sciezka</FontPath>
<CodingCP852v2>44</CodingCP852v2>
<LedText>Napismoj</LedText>
</Settings>
反序列化將顯示在內部異常:
{"The string '44' is not a valid Boolean value."}
現在我想從現場wchich造成異常的異常對象名稱來讀取(在這個例子我應該得到「編碼」)。怎麼做?
[Serializable]
public class Settings
{
public string FontPath
{
get;
set;
}
public bool Coding
{
get;
set;
}
}
try
{
using (FileStream s = File.OpenRead(fileName))
{
XmlSerializer xs = new XmlSerializer(typeof(Settings));
return (Settings)xs.Deserialize(s);
}
}
catch (Exception ex)
{
return new Settings();
}
我不得不問,爲什麼編碼首先是一個布爾值? – nuke
您是否考慮過僅顯示異常文本?它讓我感到,你想要允許這樣的錯誤的唯一原因是因爲你有用戶可編輯的XML輸入。你也可以將它們暴露給錯誤,因爲它們熟悉xml。拋出行和列號,他們擁有所有需要的信息來識別錯誤的值。 – Gusdor
這將是一個錯誤,在XML文件中存在許多可能的其他錯誤,超出了元素的錯誤值。試圖從損壞的文件中產生有用的信息是很危險的,這與您的「有用信息」同樣可能會損壞。通過瘋狂的追逐發送用戶。你已經得到了一個很好的內部異常,告訴用戶*確切地說*在文件中查找損壞的位置,不要幫助。 –