JamesNK/Newtonsoft.Json · error · ArgumentException

Expected a single member with the name '{0}'.

Error message

Expected a single member with the name '{0}'.

What it means

Thrown by ReflectionObject.Create when Type.GetMember(memberName, BindingFlags.Instance | BindingFlags.Public) returns zero or more than one member. ReflectionObject requires an unambiguous single public instance member with that exact name. Either the member doesn't exist (zero results) or it's overloaded/ambiguous (more than one).

Source

Thrown at Src/Newtonsoft.Json/Utilities/ReflectionObject.cs:131

            }
            else
            {
                if (ReflectionUtils.HasDefaultConstructor(t, false))
                {
                    Func<object> ctor = delegateFactory.CreateDefaultConstructor<object>(t);

                    creatorConstructor = args => ctor();
                }
            }

            ReflectionObject d = new ReflectionObject(creatorConstructor);

            foreach (string memberName in memberNames)
            {
                MemberInfo[] members = t.GetMember(memberName, BindingFlags.Instance | BindingFlags.Public);
                if (members.Length != 1)
                {
                    throw new ArgumentException("Expected a single member with the name '{0}'.".FormatWith(CultureInfo.InvariantCulture, memberName));
                }

                MemberInfo member = members.Single();

                ReflectionMember reflectionMember = new ReflectionMember();

                switch (member.MemberType())
                {
                    case MemberTypes.Field:
                    case MemberTypes.Property:
                        if (ReflectionUtils.CanReadMemberValue(member, false))
                        {
                            reflectionMember.Getter = delegateFactory.CreateGet<object>(member);
                        }

                        if (ReflectionUtils.CanSetMemberValue(member, false, false))
                        {
                            reflectionMember.Setter = delegateFactory.CreateSet<object>(member);

View on GitHub (pinned to 4f73e74372)

Solutions

  1. Verify the exact member name spelling, case, and visibility (must be public instance).
  2. Disambiguate overloaded members — ReflectionObject resolves by name only, so rename or remove the overloads.
  3. Confirm the member is not static; the binding flags are Instance | Public.

Example fix

// before
var ro = ReflectionObject.Create(typeof(Foo), "Compute", "Data");
// Foo has Compute() and Compute(int) -> ambiguous

// after
// rename one overload or use only unambiguous names
var ro = ReflectionObject.Create(typeof(Foo), "Data");
Defensive patterns

Strategy: validation

Validate before calling

MemberInfo[] ms = type.GetMember(name, BindingFlags.Instance | BindingFlags.Public);
if (ms.Length != 1) throw new ArgumentException($"'{name}' resolved to {ms.Length} members");

Prevention

When it happens

Trigger: Calling ReflectionObject.Create(type, "Name") where Name is missing, is static-only, or matches multiple members (e.g. an overloaded method, or a method and a property sharing a name).

Common situations: Refactoring that renames a member, switching a member from public to non-public, overloaded methods resolved by name alone, or a typo in the member name passed to ReflectionObject.Create.

Related errors


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