2009-09-30 1 views
0

Я использую XAML для сериализации некоторых объектов, и он отлично работает по большей части.Как получить XamlReader.Parse, чтобы не бросать «свойство не существует» XamlParseException?

Проблема, с которой я столкнулся, - это когда я меняю структуру данных, все старые объекты создают исключение, подобное приведенному ниже. Я не против, если значения потеряны.

Есть ли способ отключить эти исключения и просто попросить считыватель xaml игнорировать неизвестные свойства? Если сейчас нет способа сделать это, может быть что-то в новом пространстве имен System.Xaml, которое может это сделать?

System.Windows.Markup.XamlParseException: The property 'BorderPadding' does not exist in XML namespace 'clr-namespace:TemplateGenerator;assembly=App_Code'. Line '1' Position '158'. 
    at System.Windows.Markup.XamlParser.ThrowExceptionWithLine(String message, Int32 lineNumber, Int32 linePosition) 
    at System.Windows.Markup.XamlParser.ThrowException(String id, String value1, String value2, Int32 lineNumber, Int32 linePosition) 
    at System.Windows.Markup.XamlParser.WriteUnknownAttribute(XamlUnknownAttributeNode xamlUnknownAttributeNode) 
    at System.Windows.Markup.XamlParser.ProcessXamlNode(XamlNode xamlNode, Boolean& cleanup, Boolean& done) 
    at System.Windows.Markup.XamlParser.ReadXaml(Boolean singleRecordMode) 
    at System.Windows.Markup.TreeBuilderXamlTranslator._Parse() 
    at System.Windows.Markup.XamlParser.Parse() 
    at System.Windows.Markup.XamlTreeBuilder.ParseFragment() 
    at System.Windows.Markup.TreeBuilder.Parse() 
    at System.Windows.Markup.XamlReader.XmlTreeBuildDefault(ParserContext pc, XmlReader reader, Boolean wrapWithMarkupCompatReader, XamlParseMode parseMode, Boolean etwTracingEnabled) 
    at System.Windows.Markup.XamlReader.Load(XmlReader reader) 
    at System.Windows.Markup.XamlReader.Parse(String xamlText) 

ответ

0

Похоже, что мне нужен флаг DontThrowOnErrors в новом классе System.Xaml.XamlReaderSettings в .net 4.0.

См http://msdn.microsoft.com/en-us/library/system.xaml.xamlreadersettings.dontthrowonerrors%28VS.100%29.aspx

К сожалению, это свойство не превратить его в окончательную версию .NET 4, так нет простого способа сделать это.

+1

По-видимому, это свойство не попало в версию версии .net 4.0. –

0

Если вы хотите, чтобы ваш код, чтобы справиться со старыми атрибутами, то вы будете иметь, чтобы перехватить исключение явно, а затем продолжить чтение файла.

Изменяя структуру данных, вы сделали старый XAML недействительным, и парсер вполне справедливо возражает.