如果我读了这个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引起的异常(在这个例子中我应该得到“Coding”)。怎么做?
[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();
}
答案 0 :(得分:0)
XmlSerializer将始终抛出InvalidOperationException
。您的案例中的内部异常将是System.Xml.XmlException
此例外的文档显示了可能可用的属性。它们都不是错误节点的名称。 http://msdn.microsoft.com/en-us/library/system.xml.xmlexception.aspx
看来,获取名称的唯一方法是使用XmlReader
手动解析文档并自行检查类型。如果省略模式,这将为您提供对类型映射和验证的非常精细的控制。 http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.aspx