{"record":{"id":"b0561182f83e1ee4","repo":"dotnet/wpf","slug":"serialized-pagecontent-is-not-a-complex-property","errorCode":null,"errorMessage":"Serialized PageContent is not a complex property.","messagePattern":"Serialized PageContent is not a complex property\\.","errorType":"exception","errorClass":"XpsSerializationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/manager/NGCPageContentSerializerAsync.cs","lineNumber":104,"sourceCode":"        /// </param>\n        internal\n        override\n        void\n        PersistObjectData(\n            SerializableObjectContext   serializableObjectContext\n            )\n        {\n            if(serializableObjectContext.IsComplexValue)\n            {\n                NGCSerializerContext context = new NGCSerializerContext(this,\n                                                                        serializableObjectContext,\n                                                                         SerializerAction.serializePage);\n\n                ((NgcSerializationManagerAsync)SerializationManager).OperationStack.Push(context);\n            }\n            else\n            {\n                throw new XpsSerializationException(SR.ReachSerialization_WrongPropertyTypeForPageContent);\n            }\n        }\n\n        private\n        void\n        SerializePage(\n            SerializableObjectContext   serializableObjectContext\n            )\n        {\n            FixedPage fixedPage = Toolbox.GetPageRoot(serializableObjectContext.TargetObject);\n\n            if(fixedPage != null)\n            {\n                ReachSerializer serializer = SerializationManager.GetSerializer(fixedPage);\n\n                if(serializer!=null)\n                {\n                    NgcSerializationManagerAsync manager = SerializationManager as NgcSerializationManagerAsync;","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/manager/NGCPageContentSerializerAsync.cs#L86-L122","documentation":"NGCPageContentSerializerAsync.PersistObjectData requires the serialized object context to be a complex property. When the PageContent context is not a complex property (wrong property kind for a page), it throws XpsSerializationException 'Serialized PageContent is not a complex property'.","triggerScenarios":"Asynchronously serializing a PageContent whose object context was created as a non-complex (simple/dependency) property instead of a complex property context.","commonSituations":"Internal routing bugs in custom serialization managers, or calling SaveAsXaml with an object whose context construction skipped the complex-property path (e.g. serializing page content outside a FixedDocument walk).","solutions":["Serialize PageContent as part of the normal FixedDocument/FixedPage serialization flow","Ensure the manager pushes a complex-property context for PageContent","Avoid manually constructing contexts; use the standard serialization manager entry points"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try\n{\n    manager.SaveAsXaml(pageContent);\n}\ncatch (XpsSerializationException ex) when (ex.Message.Contains(\"complex property\"))\n{\n    // use standard document walk instead of manual contexts\n}","preventionTips":["Avoid manually constructing serialization contexts; use SaveAsXaml entry points","Serialize PageContent through FixedDocument rather than directly"],"tags":["wpf","xps","serialization","property-type"],"backgroundTag":"type-mismatch","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"}