Skip to content

Prefer the exact type when resolving a member converter - #1859

Merged
SimonCropp merged 2 commits into
mainfrom
fix-memberconverter-exact-type
Aug 17, 2026
Merged

Prefer the exact type when resolving a member converter#1859
SimonCropp merged 2 commits into
mainfrom
fix-memberconverter-exact-type

Conversation

@SimonCropp

Copy link
Copy Markdown
Member

VerifierSettings.GetMemberConverter walked the registrations and returned the first entry whose type was IsAssignableFrom the member's declaring type. Dictionary order is registration order, so a converter registered for a base type or an interface permanently shadowed a more specific one registered after it — the specific registration silently did nothing.

The exact declaring type is now looked up first, with the assignable walk kept as the fallback. That mirrors TryGetScrubOrIgnoreByMemberOfType, which already checks the exact type before scanning. A null declaring type returns early, matching what the old loop did for it (IsAssignableFrom(null) is false for every entry).

Test SerializationTests.MemberConverterExactType registers an interface converter first and a converter for one implementation second, then verifies both an instance of that implementation and an instance of a second implementation with no registration of its own — pinning that the exact type wins and the interface fallback still applies. It fails on main, where both render the interface's output.

Verify.Tests (1300) and StaticSettingsTests pass.

GetMemberConverter walked the registrations and took the first whose type was
assignable from the declaring type, so a converter registered for a base type or
an interface permanently shadowed a more specific one that happened to be
registered later.

The exact declaring type is now looked up first, with the assignable walk as the
fallback, mirroring TryGetScrubOrIgnoreByMemberOfType.
@SimonCropp
SimonCropp force-pushed the fix-memberconverter-exact-type branch from 402ac6c to 194ca7e Compare August 17, 2026 12:54
@SimonCropp
SimonCropp merged commit 700ddb5 into main Aug 17, 2026
5 checks passed
@SimonCropp
SimonCropp deleted the fix-memberconverter-exact-type branch August 17, 2026 22:25
This was referenced Aug 26, 2026
This was referenced Aug 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant