{"record":{"id":"85a0d0bfe51985d9","repo":"JamesNK/Newtonsoft.Json","slug":"reference-resolver-cannot-be-null","errorCode":null,"errorMessage":"Reference resolver cannot be null.","messagePattern":"Reference resolver cannot be null\\.","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"Src/Newtonsoft.Json/JsonSerializer.cs","lineNumber":98,"sourceCode":"        private string? _dateFormatString;\n        private bool _dateFormatStringSet;\n\n        /// <summary>\n        /// Occurs when the <see cref=\"JsonSerializer\"/> errors during serialization and deserialization.\n        /// </summary>\n        public virtual event EventHandler<ErrorEventArgs>? Error;\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"IReferenceResolver\"/> used by the serializer when resolving references.\n        /// </summary>\n        public virtual IReferenceResolver? ReferenceResolver\n        {\n            get => GetReferenceResolver();\n            set\n            {\n                if (value == null)\n                {\n                    throw new ArgumentNullException(nameof(value), \"Reference resolver cannot be null.\");\n                }\n\n                _referenceResolver = value;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"SerializationBinder\"/> used by the serializer when resolving type names.\n        /// </summary>\n        [Obsolete(\"Binder is obsolete. Use SerializationBinder instead.\")]\n        public virtual SerializationBinder Binder\n        {\n            get\n            {\n                if (_serializationBinder is SerializationBinder legacySerializationBinder)\n                {\n                    return legacySerializationBinder;\n                }","sourceCodeStart":80,"sourceCodeEnd":116,"githubUrl":"https://github.com/JamesNK/Newtonsoft.Json/blob/4f73e74372445108d2c1bda37b36e6f5e43402e0/Src/Newtonsoft.Json/JsonSerializer.cs#L80-L116","documentation":"Thrown by the JsonSerializer.ReferenceResolver setter when assigning null. The reference resolver implements $ref/$id object-preservation semantics; a null resolver would cause NullReferenceExceptions later during serialization, so the setter fails fast with ArgumentNullException.","triggerScenarios":"Assigning serializer.ReferenceResolver = null; passing a null resolver from configuration; clearing a resolver by setting null instead of using a default implementation.","commonSituations":"Conditionally disabling reference preservation by assigning null; DI containers returning null for an unregistered IReferenceResolver; tests stubbing a null resolver.","solutions":["To disable reference preservation, set PreserveReferencesHandling = None on settings instead of nulling the resolver.","Provide a concrete IReferenceResolver (e.g. new DefaultReferenceResolver()) when one is required.","Guard DI/config: serializer.ReferenceResolver = resolver ?? new DefaultReferenceResolver();."],"exampleFix":"// before\nserializer.ReferenceResolver = null;\n\n// after\nsettings.PreserveReferencesHandling = PreserveReferencesHandling.None;","handlingStrategy":"validation","validationCode":"serializer.ReferenceResolver = resolver ?? throw new ArgumentNullException(nameof(resolver));\n// or: settings.PreserveReferencesHandling = resolver == null ? PreserveReferencesHandling.None : PreserveReferencesHandling.Objects;","typeGuard":"static bool HasReferenceResolver(JsonSerializer s) => s.ReferenceResolver is not null;","tryCatchPattern":null,"preventionTips":["Disable reference preservation via PreserveReferencesHandling, not by nulling the resolver.","Provide a concrete IReferenceResolver when one is required.","Validate DI registrations return a non-null resolver."],"tags":["configuration","null-argument","reference-resolution"],"analyzedSha":"4f73e74372445108d2c1bda37b36e6f5e43402e0","analyzedAt":"2026-08-07T06:10:08.596Z","schemaVersion":2},"datasetVersion":"2026-08-07T07:17:06.508Z"}