{"record":{"id":"9cbf1ac74a23825e","repo":"dotnet/wpf","slug":"sr-reachserialization-wrongpropertytypeforfixedpage-9cbf1a","errorCode":null,"errorMessage":"SR.ReachSerialization_WrongPropertyTypeForFixedPage","messagePattern":"SR\\.ReachSerialization_WrongPropertyTypeForFixedPage","errorType":"exception","errorClass":"XpsSerializationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/manager/XpsOMFixedPageSerializer.cs","lineNumber":108,"sourceCode":"        internal\n        override\n        void\n        PersistObjectData(\n            SerializableObjectContext serializableObjectContext\n            )\n        {\n            Toolbox.EmitEvent(EventTrace.Event.WClientDRXSerializationBegin);\n            ReachTreeWalker treeWalker;\n\n            bool needEndVisual = BeginPersistObjectData(serializableObjectContext, out treeWalker);\n\n            if (serializableObjectContext.IsComplexValue)\n            {\n                SerializeObjectCore(serializableObjectContext);\n            }\n            else\n            {\n                throw new XpsSerializationException(SR.ReachSerialization_WrongPropertyTypeForFixedPage);\n            }\n\n            EndPersistObjectData(needEndVisual, treeWalker);\n\n            Toolbox.EmitEvent(EventTrace.Event.WClientDRXSerializationEnd);\n        }\n\n        internal\n        bool\n        BeginPersistObjectData(SerializableObjectContext serializableObjectContext, out ReachTreeWalker treeWalker)\n        {\n            ArgumentNullException.ThrowIfNull(serializableObjectContext);\n\n            _xpsOMSerializationManager.RegisterPageStart();\n\n\n            if (serializableObjectContext.IsComplexValue)\n            {","sourceCodeStart":90,"sourceCodeEnd":126,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/manager/XpsOMFixedPageSerializer.cs#L90-L126","documentation":"XpsOMFixedPageSerializer.PersistObjectData throws XpsSerializationException (SR.ReachSerialization_WrongPropertyTypeForFixedPage) when the FixedPage context is a simple value rather than a complex one. A FixedPage must be serialized as a complex node (containing visuals, canvas, glyphs, etc.); primitives are schema-invalid at that position.","triggerScenarios":"OXPS serialization reaching a FixedPage whose SerializableObjectContext.IsComplexValue is false.","commonSituations":"Generating FixedPage content programmatically and assigning simple property values where child elements are required; malformed custom page classes.","solutions":["Ensure the FixedPage object contains complex child content (UIElement visuals) rather than scalar values","Fix the page model/classes so the tree walker sees a complex value at FixedPage positions","Use WPF's FixedPage class directly instead of custom substitutes"],"exampleFix":"// before\npage.SetValue(SimpleValueProperty, 42);\n// after\nvar canvas = new Canvas();\npage.Children.Add(canvas);","handlingStrategy":"validation","validationCode":"if (page is FixedPage fp && fp.Children.Count > 0) serializer.Serialize(fp);\nelse throw new InvalidOperationException(\"FixedPage must contain complex content\");","typeGuard":"bool IsComplexFixedPage(object o) => o is FixedPage f && f.Children.Count > 0;","tryCatchPattern":"try { serializer.Serialize(page); }\ncatch (XpsSerializationException ex) when (ex.Message.Contains(\"FixedPage\")) { /* simple value at FixedPage position */ }","preventionTips":["Always add visual children (Canvas, Glyphs, Path) to FixedPages","Use System.Windows.Documents.FixedPage directly","Inspect IsComplexValue in custom tree walkers before dispatching serializers"],"tags":["wpf","xps","serialization"],"backgroundTag":"schema-validation-failed","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"}