反序列化异常处理

时间:2013-10-29 09:41:51

标签: c# xml exception deserialization

如果我读了这个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();
}

1 个答案:

答案 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