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."} 

ここで、例外を引き起こしたフィールドの例外オブジェクト名から読み取りたいと思います (この例では、「コーディング」を取得する必要があります)。どうやってするか?

[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 は常にand をスローし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

于 2013-10-29T10:14:13.070 に答える