{"record":{"id":"21da427c812a6803","repo":"dotnet/wpf","slug":"sr-reachserialization-noserializer-21da42","errorCode":null,"errorMessage":"SR.ReachSerialization_NoSerializer","messagePattern":"SR\\.ReachSerialization_NoSerializer","errorType":"exception","errorClass":"XpsSerializationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/manager/ReachFixedPageSerializerAsync.cs","lineNumber":372,"sourceCode":"        #region Private Methods\n\n        private\n        bool\n        SerializePageAsVisual(\n            Visual fixedPageAsVisual\n            )\n        {\n            bool needEndVisual = false;\n\n            ReachVisualSerializerAsync serializer = new ReachVisualSerializerAsync(SerializationManager);\n\n            if(serializer!=null)\n            {\n                needEndVisual = serializer.SerializeDisguisedVisual(fixedPageAsVisual);\n            }\n            else\n            {\n                throw new XpsSerializationException(SR.ReachSerialization_NoSerializer);\n            }\n\n            return needEndVisual;\n        }\n\n        private\n        void\n        EndSerializeReachFixedPage(\n            ReachFixedPageSerializerContext context\n            )\n        {\n            ReachFixedPageSerializerContext thisContext = context as ReachFixedPageSerializerContext;\n\n            if(thisContext != null)\n            {\n                if(thisContext.EndVisual)\n                {\n                    XmlWriter           pageWriter  = ((XpsSerializationManagerAsync)SerializationManager).","sourceCodeStart":354,"sourceCodeEnd":390,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/manager/ReachFixedPageSerializerAsync.cs#L354-L390","documentation":"Async counterpart of 3726: ReachFixedPageSerializerAsync.SerializePageAsVisual throws XpsSerializationException (ReachSerialization_NoSerializer) when no serializer is available to serialize the FixedPage as a disguised visual. Called from PersistObjectData, the missing serializer aborts the async package write.","triggerScenarios":"Async PersistObjectData selects the visual-serialization branch for a page; the serializer lookup returns null (unregistered visual type or incomplete serializer setup).","commonSituations":"Async writes of pages containing custom visuals; pipeline configured for markup-only serialization while the policy requests visual serialization.","solutions":["Register a serializer for the custom visual type used in async serialization","Stick to built-in FixedPage visuals for the async path","Align the packaging policy with the async serializer capabilities before writing"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"bool supported = page is System.Windows.Documents.FixedPage;","typeGuard":"static bool IsFixedPage(object o) => o is System.Windows.Documents.FixedPage;","tryCatchPattern":"try { writer.WriteAsync(page); } catch (System.Windows.Xps.XpsSerializationException ex) { log.Error(\"Async visual serializer missing for \" + page.GetType(), ex); throw; }","preventionTips":["Use built-in FixedPage for async visual serialization","Register custom visual serializers on the async path too","Confirm packaging policy supports visual serialization"],"tags":["xps","wpf","serialization","async","dotnet"],"backgroundTag":"missing-dependency","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-22T01:17:13.364Z"}