dotnet/wpf · error · XpsSerializationException
SR.ReachSerialization_MustHaveSerializationManager
Error message
SR.ReachSerialization_MustHaveSerializationManager
What it means
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.
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
Example fix
// before var s = new ReachPageSerializerAsync(null); s.BeginSerializeObject(page, prop, dp, 0, cb, state); // after var m = new XpsSerializationManagerAsync(new XpsPackagingPolicy(package), false); var s = new ReachPageSerializerAsync(m); s.BeginSerializeObject(page, prop, dp, 0, cb, state);
Defensive patterns
Strategy: validation
Validate before calling
if (serializer.SerializationManager == null) throw new InvalidOperationException("Async serializer has no manager"); Try / catch
try { result = serializer.BeginSerializeObject(value, prop, dp, depth, cb, state); }
catch (XpsSerializationException ex) when (ex.Message.Contains("SerializationManager")) { /* rebuild async pipeline */ } Prevention
- 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
When it happens
Trigger: Calling BeginSerializeObject(Object, SerializableProperty, DependencyProperty, Int32, AsyncCallback, Object) on an async serializer whose SerializationManager was never set (constructed with null) or was reset.
Common situations: Manually instantiating async serializers instead of using XpsDocument.BeginWrite/XpsSerializationManagerAsync; custom pipelines that forget to supply the manager to every serializer in the chain.
Understand the failure class
Background: "X is required", "must be set", "cannot be empty": the missing-required-config error family, from Vertex AI project/location to WeChat keys — this error's family across 18 libraries.
Related errors
- Serialization of this type of object is not supported.
- SR.Format(SR.MustBeOfType…
- SR.MustBeOfType
- SR.ReachSerialization_MustHaveSerializationManager
- SR.ReachSerialization_NoSerializer
AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14).
Data as JSON: /api/errors/e2ca476da503a02e.
Report an issue: GitHub.
Appendix: source
Thrown at src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/manager/ReachSerializerAsync.cs:136
SerializeObject(
SerializablePropertyContext serializedProperty
)
{
BeginSerializeObject(serializedProperty);
}
internal
virtual
void
BeginSerializeObject(
SerializablePropertyContext serializedProperty
)
{
ArgumentNullException.ThrowIfNull(serializedProperty);
if (SerializationManager == null)
{
throw new XpsSerializationException(SR.ReachSerialization_MustHaveSerializationManager);
}
//
// At this stage discover the graph of properties of the object that
// need to be serialized
//
SerializableObjectContext serializableObjectContext = DiscoverObjectData(serializedProperty.Value,
serializedProperty);
if(serializableObjectContext!=null)
{
//
// Push the object at hand on the context stack
//
SerializationManager.GraphContextStack.Push(serializableObjectContext);
ReachSerializerContext context = new ReachSerializerContext(this,
serializableObjectContext,View on GitHub (pinned to 81131a70a4)