4

如果我阅读此 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();
}
4

1 回答 1

0

XmlSerializer 将始终抛出和InvalidOperationException. 在您的情况下,内部异常将是System.Xml.XmlException

此异常的文档向您展示了可能可用的属性。它们都不是错误节点的名称。http://msdn.microsoft.com/en-us/library/system.xml.xmlexception.aspx

似乎获得名称的唯一方法是使用 an 手动解析文档XmlReader并自己检查类型。如果您省略模式,这将为您提供对类型映射和验证的非常细粒度的控制。http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.aspx

于 2013-10-29T10:14:13.070 回答