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
- Verify the exact member name spelling, case, and visibility (must be public instance).
- Disambiguate overloaded members — ReflectionObject resolves by name only, so rename or remove the overloads.
- 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
- Pre-validate member names with GetMember before calling ReflectionObject.Create.
- Keep member names unambiguous — avoid method/property name collisions and overloads.
- Add a build-time check that reflection-bound member names still resolve.
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
- Could not create getter for {0}.
- Could not create setter for {0}.
- Unexpected member type '{0}' for member '{1}'.
- MemberInfo must be of type FieldInfo, PropertyInfo, EventInf
- MemberInfo '{0}' is not of type FieldInfo or PropertyInfo
AI-assisted analysis of JamesNK/Newtonsoft.Json@4f73e74372 (2026-08-07).
Data as JSON: /api/errors/236a7f30f06027fe.
Report an issue: GitHub.