{"record":{"id":"d957ecec60a6fd40","repo":"dotnet/wpf","slug":"sr-mustbeoftype-reachvisualserializerasync","errorCode":null,"errorMessage":"SR.MustBeOfType","messagePattern":"SR\\.MustBeOfType","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/manager/ReachVisualSerializerAsync.cs","lineNumber":76,"sourceCode":"                }\n            }\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public\n        override\n        void\n        SerializeObject(\n            object serializedObject\n            )\n        {\n            Visual v = serializedObject as Visual;\n\n            if (v == null)\n            {\n                throw new ArgumentException(SR.Format(SR.MustBeOfType, \"serializedObject\", typeof(Visual)));\n            }\n\n            IXpsSerializationManagerAsync manager = (IXpsSerializationManagerAsync)SerializationManager;\n\n            XmlWriter pageWriter  = ((PackageSerializationManager)manager).\n                                    PackagingPolicy.AcquireXmlWriterForPage();\n\n            XmlWriter resWriter = ((PackageSerializationManager)manager).\n                                    PackagingPolicy.AcquireXmlWriterForResourceDictionary();\n\n            SerializeTree(v, resWriter, pageWriter);\n        }\n\n        /// <summary>\n        /// \n        /// </summary>\n        internal\n        override","sourceCodeStart":58,"sourceCodeEnd":94,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/manager/ReachVisualSerializerAsync.cs#L58-L94","documentation":"Async variant of error 3750: ReachVisualSerializerAsync.SerializeObject throws ArgumentException (SR.MustBeOfType) when serializedObject is not a Visual. The async serialization manager additionally expects to cast SerializationManager to IXpsSerializationManagerAsync, so the argument must be a Visual for the asynchronous page-writing pipeline to proceed.","triggerScenarios":"Calling the async serializer's SerializeObject with null or a non-Visual serializedObject during asynchronous XPS document production.","commonSituations":"Async XPS printing/print-ticket workflows where the caller passes data objects instead of visuals; null results from failed visual creation; mixing sync and async serializer APIs.","solutions":["Pass a Visual-derived object to SerializeObject","Check for null/incorrect type before invoking the async serializer","Use IXpsSerializationManagerAsync with a compatible packaging policy so pages can be acquired"],"exampleFix":"// before\nasyncSerializer.SerializeObject(model);\n// after\nif (model is Visual visual) asyncSerializer.SerializeObject(visual);\nelse throw new ArgumentException(\"serializedObject must be a Visual\", nameof(model));","handlingStrategy":"type-guard","validationCode":"if (!(obj is Visual)) return; // skip or throw before async work\nvar visual = (Visual)obj;","typeGuard":"bool IsVisual(object o) => o is Visual;","tryCatchPattern":"try { await SerializeAsync(obj); }\ncatch (ArgumentException ex) when (ex.ParamName == \"serializedObject\") { /* non-Visual */ }","preventionTips":["Guard inputs before entering async pipelines where failures surface later","Use Visual-typed parameters in your own async wrappers","Never pass null to the async serializer"],"tags":["wpf","xps","async","argument-exception"],"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-22T01:17:13.364Z"}