JamesNK/Newtonsoft.Json · error · ArgumentOutOfRangeException
value
Error message
value
What it means
ArgumentOutOfRangeException(nameof(value)) from the MergeArrayHandling property setter on JsonMergeSettings, validating the value is within MergeArrayHandling.Concat..MergeArrayHandling.Merge. An out-of-range integer cast to MergeArrayHandling (or a value bound from invalid configuration) is rejected. nameof(value) is why the message is just "value".
Source
Thrown at Src/Newtonsoft.Json/Linq/JsonMergeSettings.cs:58
/// Initializes a new instance of the <see cref="JsonMergeSettings"/> class.
/// </summary>
public JsonMergeSettings()
{
_propertyNameComparison = StringComparison.Ordinal;
}
/// <summary>
/// Gets or sets the method used when merging JSON arrays.
/// </summary>
/// <value>The method used when merging JSON arrays.</value>
public MergeArrayHandling MergeArrayHandling
{
get => _mergeArrayHandling;
set
{
if (value < MergeArrayHandling.Concat || value > MergeArrayHandling.Merge)
{
throw new ArgumentOutOfRangeException(nameof(value));
}
_mergeArrayHandling = value;
}
}
/// <summary>
/// Gets or sets how null value properties are merged.
/// </summary>
/// <value>How null value properties are merged.</value>
public MergeNullValueHandling MergeNullValueHandling
{
get => _mergeNullValueHandling;
set
{
if (value < MergeNullValueHandling.Ignore || value > MergeNullValueHandling.Merge)
{
throw new ArgumentOutOfRangeException(nameof(value));View on GitHub (pinned to 4f73e74372)
Solutions
- Guard with Enum.IsDefined(typeof(MergeArrayHandling), v) before assigning.
- Use enum-aware configuration binding that rejects unknown values.
- Default-initialise JsonMergeSettings and only override validated members.
Example fix
// before
settings.MergeArrayHandling = (MergeArrayHandling)configValue;
// after
if (Enum.IsDefined(typeof(MergeArrayHandling), configValue))
settings.MergeArrayHandling = (MergeArrayHandling)configValue; Defensive patterns
Strategy: validation
Validate before calling
if (Enum.IsDefined(typeof(MergeArrayHandling), v)) settings.MergeArrayHandling = (MergeArrayHandling)v;
Type guard
static bool IsValidMergeArrayHandling(int v) => Enum.IsDefined(typeof(MergeArrayHandling), v);
Try / catch
try { settings.MergeArrayHandling = (MergeArrayHandling)configValue; } catch (ArgumentOutOfRangeException) { /* keep default */ } Prevention
- Validate enum values with Enum.IsDefined before assigning.
- Use enum-aware configuration binding.
- Default-initialise JsonMergeSettings and override only validated values.
When it happens
Trigger: Assigning settings.MergeArrayHandling = (MergeArrayHandling)50; or binding a numeric/textual value not matching Concat, Union, Replace, or Merge. Reflection assignment of unrecognised enum ints during JObject.Merge configuration.
Common situations: Config-driven merge settings binding without enum validation; deserializing JsonMergeSettings from JSON with an invalid enum value; integer casts from external config sources.
Related errors
- value
- Value must be positive.
- Value must be positive.
- Value must be positive.
- Indentation value must be greater than 0.
AI-assisted analysis of JamesNK/Newtonsoft.Json@4f73e74372 (2026-08-07).
Data as JSON: /api/errors/07a2ad20a157fada.
Report an issue: GitHub.