【发布时间】:2013-10-29 09:41:50
【问题描述】:
如果我阅读了这个 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."}
现在我想从导致异常的字段的异常对象名称中读取(在这个例子中我应该得到“编码”)。该怎么做?
[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();
}
【问题讨论】:
-
我不得不问为什么首先要编码一个布尔值?
-
您是否考虑过只显示异常文本?让我感到震惊的是,您希望允许这样的错误的唯一原因是因为您有用户可编辑的 xml 输入。您也可以将他们暴露在错误中,因为他们熟悉 xml。输入行号和列号,它们就拥有识别错误值所需的所有信息。
-
这将是一个错误,除了元素的错误值之外,XML 文件中还有许多其他可能的错误。试图从损坏的文件中生成有用的信息是危险的,您的“有用信息”也很可能会损坏。让用户大吃一惊。您已经得到了一个很好的内部异常,它告诉用户确切地在文件中查找损坏的位置,不要帮助。
标签: c# xml exception deserialization