Error diagnostics
jhranac opened this issue · comments
Hello,
Is there any way how to retrieve details about which XML fragment failed to deserialize?
When we're changing the XML structure and implement various converters to fix it so it's compatible from the legacy version it's hard to see which bits we have possibly missed. The de-serialization crashes with an exception that is extremely unhelpful.
System.ArgumentNullException : Value cannot be null.
Parameter name: key
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at ExtendedXmlSerializer.ContentModel.Identification.IdentityStore.Get(String name, String identifier)
at ExtendedXmlSerializer.ContentModel.Reflection.TypePartReflector.Create(TypeParts parameter)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at ExtendedXmlSerializer.Core.Sources.CacheBase`2.Get(TKey key)
at ExtendedXmlSerializer.ContentModel.Reflection.TypeParser.Create(String parameter)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at ExtendedXmlSerializer.ContentModel.Reflection.ReflectionParser.Create(String parameter)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at ExtendedXmlSerializer.ContentModel.Format.ContextualReader`1.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Reflection.TypedParsingReader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.TrackingReader`1.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Reflection.Classification.FromAttributes(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Reflection.Classification.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.RuntimeSerializer.Get(IFormatReader reader)
at ExtendedXmlSerializer.ExtensionModel.Instances.SerializationMonitorExtension.Reader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.MemberHandler.Handle(IInnerContent contents, IMemberSerializer member)
at ExtendedXmlSerializer.ContentModel.Members.MemberInnerContentHandler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ExtensionModel.Content.UnknownContentHandlingExtension.Handler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ContentModel.Content.InnerContentReader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ExtensionModel.Instances.SerializationMonitorExtension.Reader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ExtensionModel.Instances.SerializationMonitorExtension.Reader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Collections.CollectionContentsHandler.Handle(IListInnerContent contents, IReader reader)
at ExtendedXmlSerializer.ContentModel.Collections.CollectionInnerContentHandler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ExtensionModel.Content.UnknownContentHandlingExtension.Handler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ContentModel.Content.InnerContentReader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ExtensionModel.Instances.SerializationMonitorExtension.Reader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.MemberHandler.Handle(IInnerContent contents, IMemberSerializer member)
at ExtendedXmlSerializer.ContentModel.Members.MemberInnerContentHandler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ExtensionModel.Content.UnknownContentHandlingExtension.Handler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ContentModel.Content.InnerContentReader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ExtensionModel.Instances.SerializationMonitorExtension.Reader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ExtensionModel.Instances.SerializationMonitorExtension.Reader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Collections.CollectionContentsHandler.Handle(IListInnerContent contents, IReader reader)
at ExtendedXmlSerializer.ContentModel.Collections.CollectionInnerContentHandler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ExtensionModel.Content.UnknownContentHandlingExtension.Handler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ContentModel.Content.InnerContentReader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ExtensionModel.Instances.SerializationMonitorExtension.Reader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.MemberHandler.Handle(IInnerContent contents, IMemberSerializer member)
at ExtendedXmlSerializer.ContentModel.Members.MemberInnerContentHandler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ExtensionModel.Content.UnknownContentHandlingExtension.Handler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ContentModel.Content.InnerContentReader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ExtensionModel.Instances.SerializationMonitorExtension.Reader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ExtensionModel.Instances.SerializationMonitorExtension.Reader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Collections.CollectionContentsHandler.Handle(IListInnerContent contents, IReader reader)
at ExtendedXmlSerializer.ContentModel.Collections.CollectionInnerContentHandler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ExtensionModel.Content.UnknownContentHandlingExtension.Handler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ContentModel.Content.InnerContentReader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ExtensionModel.Instances.SerializationMonitorExtension.Reader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ContentModel.Members.MemberHandler.Handle(IInnerContent contents, IMemberSerializer member)
at ExtendedXmlSerializer.ContentModel.Members.MemberInnerContentHandler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ExtensionModel.Content.UnknownContentHandlingExtension.Handler.IsSatisfiedBy(IInnerContent parameter)
at ExtendedXmlSerializer.ContentModel.Content.InnerContentReader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ExtensionModel.Instances.SerializationMonitorExtension.Reader.Get(IFormatReader parameter)
at ExtendedXmlSerializer.ContentModel.Members.Extensions.GetIfAssigned[T](IReader`1 this, IFormatReader reader)
at ExtendedXmlSerializer.ExtensionModel.Xml.Read.Get(XmlReader parameter)
at ExtendedXmlSerializer.ExtensionMethodsForSerialization.Deserialize[T](IExtendedXmlSerializer this, XmlReaderSettings settings, TextReader reader)
at OurCode.Something.Something.Deserialize[T](XDocument dataToDeserialize) in Somewhere.cs:line 666
Hi @jhranac have you tried the EnableMemberExceptionHandling
method? It should provide better exception messaging when exceptions occur during deserialization. Example of this found here, along with being able to configure what happens when unknown content occurs:
A configurable and eXtensible Xml serializer for .NET. - home/Issue507Tests.cs at master · ExtendedXmlSerializer/home
Perfect!! That does exactly what I needed. Thanks!
Going through issues here and it looks like we have this one answered. Please do let me know if you have any further questions and I will do my best to assist. Closing for now.