{"record":{"id":"e2ca476da503a02e","repo":"dotnet/wpf","slug":"sr-reachserialization-musthaveserializationmanager-e2ca47","errorCode":null,"errorMessage":"SR.ReachSerialization_MustHaveSerializationManager","messagePattern":"SR\\.ReachSerialization_MustHaveSerializationManager","errorType":"exception","errorClass":"XpsSerializationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/manager/ReachSerializerAsync.cs","lineNumber":136,"sourceCode":"        SerializeObject(\n            SerializablePropertyContext serializedProperty\n            )\n        {\n            BeginSerializeObject(serializedProperty);\n        }\n\n        internal\n        virtual\n        void\n        BeginSerializeObject(\n            SerializablePropertyContext serializedProperty\n            )\n        {\n            ArgumentNullException.ThrowIfNull(serializedProperty);\n\n            if (SerializationManager == null)\n            {\n                throw new XpsSerializationException(SR.ReachSerialization_MustHaveSerializationManager);\n            }\n\n            //\n            // At this stage discover the graph of properties of the object that\n            // need to be serialized\n            //                      \n            SerializableObjectContext serializableObjectContext = DiscoverObjectData(serializedProperty.Value,\n                                                                                     serializedProperty);\n\n            if(serializableObjectContext!=null)\n            {\n                //\n                // Push the object at hand on the context stack\n                //\n                SerializationManager.GraphContextStack.Push(serializableObjectContext);\n\n                ReachSerializerContext context = new ReachSerializerContext(this,\n                                                                            serializableObjectContext,","sourceCodeStart":118,"sourceCodeEnd":154,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/manager/ReachSerializerAsync.cs#L118-L154","documentation":"ReachSerializerAsync.BeginSerializeObject (property overload) requires a non-null SerializationManager to discover and enqueue asynchronous serialization work. If the manager reference is null, no async operation can be queued, so an XpsSerializationException is thrown synchronously at Begin time.","triggerScenarios":"Calling BeginSerializeObject(Object, SerializableProperty, DependencyProperty, Int32, AsyncCallback, Object) on an async serializer whose SerializationManager was never set (constructed with null) or was reset.","commonSituations":"Manually instantiating async serializers instead of using XpsDocument.BeginWrite/XpsSerializationManagerAsync; custom pipelines that forget to supply the manager to every serializer in the chain.","solutions":["Ensure the async serializer is created with a valid XpsSerializationManagerAsync instance","Drive async serialization through XpsDocument.BeginWrite rather than constructing ReachSerializerAsync manually","Guard with (serializer.SerializationManager != null) before calling Begin methods"],"exampleFix":"// before\nvar s = new ReachPageSerializerAsync(null);\ns.BeginSerializeObject(page, prop, dp, 0, cb, state);\n// after\nvar m = new XpsSerializationManagerAsync(new XpsPackagingPolicy(package), false);\nvar s = new ReachPageSerializerAsync(m);\ns.BeginSerializeObject(page, prop, dp, 0, cb, state);","handlingStrategy":"validation","validationCode":"if (serializer.SerializationManager == null) throw new InvalidOperationException(\"Async serializer has no manager\");","typeGuard":null,"tryCatchPattern":"try { result = serializer.BeginSerializeObject(value, prop, dp, depth, cb, state); }\ncatch (XpsSerializationException ex) when (ex.Message.Contains(\"SerializationManager\")) { /* rebuild async pipeline */ }","preventionTips":["Create async serializers only from a factory that injects XpsSerializationManagerAsync","Use XpsDocument.BeginWrite as the entry point","Fail fast on null manager in your own wrapper layer"],"tags":["wpf","xps","serialization","async","null-reference"],"backgroundTag":"missing-required-config","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"}