{"record":{"id":"cf1b9e4861b8200b","repo":"dotnet/wpf","slug":"sr-deferringloaderinstancenull","errorCode":null,"errorMessage":"SR.DeferringLoaderInstanceNull","messagePattern":"SR\\.DeferringLoaderInstanceNull","errorType":"exception","errorClass":"XamlObjectReaderException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/XamlObjectReader.cs","lineNumber":344,"sourceCode":"                foreach (var ov in Children)\n                {\n                    ov.FindNamespace(context);\n                }\n            }\n\n            private bool MemberRequiresNamespaceHoisting(XamlMember member)\n            {\n                return (member.IsAttachable || (member.IsDirective && !XamlXmlWriter.IsImplicit(member)))\n                    && (member.PreferredXamlNamespace != XamlLanguage.Xml1998Namespace);\n            }\n\n            public static XamlTemplateMarkupInfo ConvertToXamlReader(\n                object propertyValue, XamlValueConverter<XamlDeferringLoader> deferringLoader, SerializerContext context)\n            {\n                XamlDeferringLoader converter = deferringLoader.ConverterInstance;\n                if (converter is null)\n                {\n                    throw new XamlObjectReaderException(SR.Format(SR.DeferringLoaderInstanceNull, deferringLoader));\n                }\n\n                context.Instance = propertyValue;\n                XamlReader reader = context.Runtime.DeferredSave(context.TypeDescriptorContext, deferringLoader, propertyValue);\n                context.Instance = null;\n                using (reader)\n                {\n                    return new XamlTemplateMarkupInfo(reader, context);\n                }\n            }\n\n            public static MemberMarkupInfo ForAttachedProperty\n                (object source, XamlMember attachedProperty, object value, SerializerContext context)\n            {\n                if (GetSerializationVisibility(attachedProperty) == DesignerSerializationVisibility.Hidden)\n                {\n                    return null;\n                }","sourceCodeStart":326,"sourceCodeEnd":362,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/XamlObjectReader.cs#L326-L362","documentation":"When a property must be saved with deferred content (x:XData, templates, etc.), XamlObjectReader looks up the XamlDeferringLoader configured for the property's type. The converter record exists but its ConverterInstance is null — the deferring loader could not be instantiated — so reading cannot defer the content and throws XamlObjectReaderException.","triggerScenarios":"Reading an object whose property has a XamlValueConverter<XamlDeferringLoader> whose ConverterInstance is null (deferring loader type failed to construct or was registered with a null instance), reached via GetPropertyValueInfoInternal → ConvertToXamlReader (XamlObjectReader.cs:341-344).","commonSituations":"Custom XamlDeferringLoader implementations with no public parameterless constructor; a broken/misconfigured XamlSchemaContext that creates converter records lazily; type-level XamlDeferLoadAttribute pointing at an unavailable assembly.","solutions":["Ensure the XamlDeferringLoader type used by the property (via XamlDeferLoadAttribute or schema context lookup) has an accessible parameterless constructor and its assembly is loadable.","Check the deferring loader's ConverterInstance before reading: if it is null, register a working loader or remove the defer-load requirement.","Verify the schema context is configured with the correct assembly set so the loader type resolves."],"exampleFix":"// before\n[XamlDeferLoad(typeof(MyDeferringLoader), typeof(ContentElement))] // MyDeferringLoader has no parameterless ctor\npublic object Content { get; set; }\n// after\npublic class MyDeferringLoader : XamlDeferringLoader\n{\n    public MyDeferringLoader() { } // ensure public parameterless ctor\n    ...\n}","handlingStrategy":"validation","validationCode":"var loader = deferringLoader?.ConverterInstance;\nif (loader is null) throw new InvalidOperationException($\"Deferring loader {deferringLoader} could not be instantiated.\");","typeGuard":"bool HasInstantiableLoader(XamlValueConverter<XamlDeferringLoader> c) => c?.ConverterInstance is not null;\n","tryCatchPattern":"try { return MemberMarkupInfo.ConvertToXamlReader(value, loader, context); }\ncatch (XamlObjectReaderException ex) when (ex.Message.Contains(\"deferring\")) { /* fall back to non-deferred serialization or re-register loader */ }","preventionTips":["Give every XamlDeferringLoader subclass a public parameterless constructor.","Keep XamlDeferLoadAttribute assemblies in the deployment/trimming list.","Validate schema-context converter lookups in unit tests before shipping."],"tags":["xaml","missing-dependency","deferring-loader"],"backgroundTag":"missing-dependency","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}