{"record":{"id":"8aa7118eeccedbad","repo":"dotnet/wpf","slug":"sr-reachserialization-expectedfixedpage","errorCode":null,"errorMessage":"SR.ReachSerialization_ExpectedFixedPage","messagePattern":"SR\\.ReachSerialization_ExpectedFixedPage","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/manager/NGCSerializer.cs","lineNumber":156,"sourceCode":"\n        /// <summary>\n        ///\n        /// </summary>\n        public\n        override\n        void\n        SerializeObject(\n            Object serializedObject\n            )\n        {\n            NgcSerializationManager ngcManager = SerializationManager as NgcSerializationManager;\n            ArgumentNullException.ThrowIfNull(serializedObject);\n\n            FixedPage fp = serializedObject as FixedPage;\n            if( fp == null )\n            {\n\n               throw new ArgumentException(SR.ReachSerialization_ExpectedFixedPage);\n            }\n\n            bool bManualStartDoc = ngcManager.StartPage();\n\n            Size pageSize = new Size(fp.Width, fp.Height);\n            ngcManager.PageSize = pageSize;\n\n            Visual visual = (Visual)serializedObject as Visual;\n\n            if (visual != null)\n            {\n                ngcManager.WalkVisual(visual);\n            }\n\n            ngcManager.EndPage();\n            if (bManualStartDoc)\n            {\n                ngcManager.EndDocument();","sourceCodeStart":138,"sourceCodeEnd":174,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/manager/NGCSerializer.cs#L138-L174","documentation":"NgcSerializer.SerializeObject (the FixedPage overload) casts serializedObject to FixedPage and throws ArgumentException(SR.ReachSerialization_ExpectedFixedPage) when the cast fails. The serializer can only write FixedPage content at this level of the XPS hierarchy.","triggerScenarios":"Calling this SerializeObject overload with a non-FixedPage object (e.g. a FixedDocument or a Canvas), so the `as FixedPage` cast returns null.","commonSituations":"Serializing raw page visuals directly; wiring the page-level serializer to document-level objects after a refactor of the serialization chain.","solutions":["Pass a FixedPage to this overload; convert other content into a FixedPage first.","Route FixedDocument/FixedDocumentSequence objects to their dedicated serializer overloads.","Guard with 'is FixedPage' before invoking."],"exampleFix":"// before\npageSerializer.SerializeObject(fixedDocument);\n// after\nif (fixedDocument is FixedPage fp) pageSerializer.SerializeObject(fp);\nelse docSerializer.SerializeObject(fixedDocument);","handlingStrategy":"type-guard","validationCode":"if (obj is not FixedPage)\n    throw new ArgumentException(\"Page serializer requires a FixedPage instance\");","typeGuard":"bool IsFixedPage(object o) => o is FixedPage;","tryCatchPattern":"try { pageSerializer.SerializeObject(obj); }\ncatch (ArgumentException ex) when (ex.Message.Contains(\"FixedPage\")) { /* dispatch to the correct serializer level */ }","preventionTips":["Only feed page-level serializers FixedPage objects","Convert visuals to FixedPage before serializing","Document which serializer overload handles which XPS hierarchy level"],"tags":["wpf","xps","argument","type-mismatch","serialization"],"backgroundTag":"invalid-argument-value","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"}