JamesNK/Newtonsoft.Json · error · ArgumentNullException
Reference resolver cannot be null.
Error message
Reference resolver cannot be null.
What it means
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.
Source
Thrown at Src/Newtonsoft.Json/JsonSerializer.cs:98
private string? _dateFormatString;
private bool _dateFormatStringSet;
/// <summary>
/// Occurs when the <see cref="JsonSerializer"/> errors during serialization and deserialization.
/// </summary>
public virtual event EventHandler<ErrorEventArgs>? Error;
/// <summary>
/// Gets or sets the <see cref="IReferenceResolver"/> used by the serializer when resolving references.
/// </summary>
public virtual IReferenceResolver? ReferenceResolver
{
get => GetReferenceResolver();
set
{
if (value == null)
{
throw new ArgumentNullException(nameof(value), "Reference resolver cannot be null.");
}
_referenceResolver = value;
}
}
/// <summary>
/// Gets or sets the <see cref="SerializationBinder"/> used by the serializer when resolving type names.
/// </summary>
[Obsolete("Binder is obsolete. Use SerializationBinder instead.")]
public virtual SerializationBinder Binder
{
get
{
if (_serializationBinder is SerializationBinder legacySerializationBinder)
{
return legacySerializationBinder;
}View on GitHub (pinned to 4f73e74372)
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();.
Example fix
// before serializer.ReferenceResolver = null; // after settings.PreserveReferencesHandling = PreserveReferencesHandling.None;
Defensive patterns
Strategy: validation
Validate before calling
serializer.ReferenceResolver = resolver ?? throw new ArgumentNullException(nameof(resolver)); // or: settings.PreserveReferencesHandling = resolver == null ? PreserveReferencesHandling.None : PreserveReferencesHandling.Objects;
Type guard
static bool HasReferenceResolver(JsonSerializer s) => s.ReferenceResolver is not null;
Prevention
- 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.
When it happens
Trigger: Assigning serializer.ReferenceResolver = null; passing a null resolver from configuration; clearing a resolver by setting null instead of using a default implementation.
Common situations: Conditionally disabling reference preservation by assigning null; DI containers returning null for an unregistered IReferenceResolver; tests stubbing a null resolver.
Related errors
- Value must be positive.
- Cannot get SerializationBinder because an ISerializationBind
- Serialization binder cannot be null.
- Value must be positive.
- Cannot get SerializationBinder because an ISerializationBind
AI-assisted analysis of JamesNK/Newtonsoft.Json@4f73e74372 (2026-08-07).
Data as JSON: /api/errors/85a0d0bfe51985d9.
Report an issue: GitHub.