{"record":{"id":"dbd8621e2788a380","repo":"MassTransit/MassTransit","slug":"no-json-serializer-configured","errorCode":null,"errorMessage":"No JSON serializer configured","messagePattern":"No JSON serializer configured","errorType":"exception","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/MassTransit/Serialization/ObjectDeserializer.cs","lineNumber":28,"sourceCode":"\n        static readonly AsyncLocal<IObjectDeserializer?> _currentSerializer = new AsyncLocal<IObjectDeserializer?>();\n\n        public static IObjectDeserializer? Default\n        {\n            set => _serializer = value ?? SystemTextJsonMessageSerializer.Instance;\n        }\n\n        public static IObjectDeserializer Current\n        {\n            set => _currentSerializer.Value = value;\n        }\n\n        public static string? Serialize(object? value)\n        {\n            if (value == null)\n                return null;\n\n            var serializer = _currentSerializer.Value ?? _serializer ?? throw new ConfigurationException(\"No JSON serializer configured\");\n\n            return serializer.SerializeObject(value).GetString();\n        }\n\n        public static T? Deserialize<T>(object? value, T? defaultValue = null)\n            where T : class\n        {\n            switch (value)\n            {\n                case null:\n                case string text when string.IsNullOrWhiteSpace(text):\n                    return defaultValue;\n            }\n\n            var serializer = _currentSerializer.Value ?? _serializer ?? throw new ConfigurationException(\"No JSON serializer configured\");\n\n            return serializer.DeserializeObject<T>(value);\n        }","sourceCodeStart":10,"sourceCodeEnd":46,"githubUrl":"https://github.com/MassTransit/MassTransit/blob/62ab339afa3bac2e9b3fe1769d0d35d7e44778e9/src/MassTransit/Serialization/ObjectDeserializer.cs#L10-L46","documentation":"ObjectDeserializer.Serialize resolves a lazily configured JSON serializer (per AsyncLocal current, else static _serializer). If neither is set, it throws ConfigurationException — no serializer was configured on the bus/serialization configuration before this static helper was used.","triggerScenarios":"Calling ObjectDeserializer.Serialize(object) before any MassTransit JSON serializer has been configured (e.g. before bus creation / JsonSerializerOptions registration), typically at startup or in code paths that run outside a configured bus.","commonSituations":"Unit tests that call ObjectDeserializer directly without configuring MassTransit serialization; using the static helper in a console app before BusConfigurator runs; ordering bugs where serialization happens before AddMassTransit completes.","solutions":["Configure MassTransit's JSON serializer before calling ObjectDeserializer (set up the bus / serializer options during startup)","Ensure bus configuration (e.g. cfg.UseSerialization / serializer registration) executes before any Serialize call","In tests, initialize serialization in a fixture setup step","If you only need ad-hoc JSON, use JsonSerializer.Serialize directly instead of ObjectDeserializer"],"exampleFix":"// before\nvar json = ObjectDeserializer.Serialize(msg); // no serializer configured -> throws\n// after\ncfg.UseSerialization(SystemTextJsonSerializerFactory.Default); // during bus config\nvar json = ObjectDeserializer.Serialize(msg);","handlingStrategy":"try-catch","validationCode":"if (ObjectDeserializer.Current == null) // or check serializer configured during startup\n    throw new InvalidOperationException(\"Call bus/serialization configuration before ObjectDeserializer.Serialize\");","typeGuard":"null","tryCatchPattern":"try { return ObjectDeserializer.Serialize(value); }\ncatch (ConfigurationException ex) { logger.LogCritical(ex, \"MassTransit JSON serializer not configured\"); throw; }","preventionTips":["Configure MassTransit serialization in Program.cs before any serialization call","Initialize serializer setup in test fixture setup","Order startup so serializer registration precedes first use"],"tags":["configuration","serialization","masstransit","masstransit"],"backgroundTag":"missing-configuration","analyzedSha":"62ab339afa3bac2e9b3fe1769d0d35d7e44778e9","analyzedAt":"2026-09-13T22:47:47.593Z","contentChangedAt":"2026-09-13T22:47:47.593Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}