Skip to content

feat!: serializer responsibility redesign (v0.22.0)#45

Merged
keithdv merged 1 commit intomainfrom
fix/serializer-responsibility-redesign
Mar 21, 2026
Merged

feat!: serializer responsibility redesign (v0.22.0)#45
keithdv merged 1 commit intomainfrom
fix/serializer-responsibility-redesign

Conversation

@keithdv
Copy link
Contributor

@keithdv keithdv commented Mar 21, 2026

Summary

  • Remove ReferenceHandler from JsonSerializerOptions entirely — reference handling is now a converter-level concern, not a serializer-level concern
  • Add NeatooReferenceResolver.Current static AsyncLocal accessor for converters to access the resolver directly
  • Delete IsNeatooType(), PlainOptions, and NeatooReferenceHandler.cs — single JsonSerializerOptions, no type classification
  • Fix resolver scoping bug where using var inside if block caused premature disposal
  • Remove dead reference handler code from NeatooInterfaceJsonTypeConverter.Read()

Breaking Changes

Downstream converters (including Neatoo's NeatooBaseJsonTypeConverter) that access options.ReferenceHandler.CreateResolver() must migrate to NeatooReferenceResolver.Current with null check. See migration guide.

Test plan

  • All 2,038 tests pass (0 failures, 6 pre-existing skips)
  • Design.Tests (84 tests) pass
  • Record round-trip serialization tests pass
  • Builds succeed on both net9.0 and net10.0

🤖 Generated with Claude Code

…ern, bump to v0.22.0

Remove ReferenceHandler from JsonSerializerOptions entirely. Converters
access the resolver directly via NeatooReferenceResolver.Current (static
AsyncLocal accessor) instead of options.ReferenceHandler.CreateResolver().

Delete IsNeatooType(), PlainOptions, and NeatooReferenceHandler.cs.
Single JsonSerializerOptions instance, no type classification.

BREAKING CHANGE: Downstream converters that access
options.ReferenceHandler.CreateResolver() must migrate to
NeatooReferenceResolver.Current with null check.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@keithdv keithdv merged commit 366b4f2 into main Mar 21, 2026
2 checks passed
@keithdv keithdv deleted the fix/serializer-responsibility-redesign branch March 21, 2026 01:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant