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

  1. Guard with Enum.IsDefined(typeof(MergeArrayHandling), v) before assigning.
  2. Use enum-aware configuration binding that rejects unknown values.
  3. 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

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


AI-assisted analysis of JamesNK/Newtonsoft.Json@4f73e74372 (2026-08-07). Data as JSON: /api/errors/07a2ad20a157fada. Report an issue: GitHub.