Skip to content

feat(csharp): support nested container field codec#3639

Merged
chaokunyang merged 1 commit intoapache:mainfrom
chaokunyang:support_nested_container_field_for_csharp
Apr 29, 2026
Merged

feat(csharp): support nested container field codec#3639
chaokunyang merged 1 commit intoapache:mainfrom
chaokunyang:support_nested_container_field_for_csharp

Conversation

@chaokunyang
Copy link
Copy Markdown
Collaborator

@chaokunyang chaokunyang commented Apr 29, 2026

Why?

C# generated serializers need field-level schema descriptors that can describe the exact Fory wire type for scalars and nested containers. The previous [Field(Encoding = ...)] model only handled a narrow integer-encoding override, which was not expressive enough for nested annotated container metadata or compatible-mode skipping based on remote field metadata.

What does this PR do?

  • Replaces the C# [Field] / FieldEncoding API with [ForyField], supporting optional stable field ids and Type = typeof(S...) schema descriptors.
  • Adds Apache.Fory.Schema.Types descriptor marker types for scalar, packed-array, list, set, and map field metadata.
  • Extends the C# source generator to emit descriptor-driven field codecs for scalar, list, and map payloads, including nested generics and nullability-aware generated read/write helpers.
  • Updates compatible field skipping so C# consumes payloads according to remote nested field metadata, including scalar, packed array, list/set, and map descriptors.
  • Updates the Fory compiler C# generator to emit [ForyField(Type = typeof(...))] hints, including nested map/list descriptors and reduced-precision Half / BFloat16 carriers.
  • Adds C# runtime, compiler-generator, and xlang peer coverage for unsigned schema descriptors and nested annotated containers, and moves the nested annotated container xlang checks to CSharpXlangTest.
  • Refreshes the C# README and field-configuration guide for the new [ForyField] descriptor API.

Related issues

#1017
#3630
#3625
#3630
#3636

AI Contribution Checklist

  • Substantial AI assistance was used in this PR: yes / no
  • If yes, I included a completed AI Contribution Checklist in this PR description and the required AI Usage Disclosure.
  • If yes, my PR description includes the required ai_review summary and screenshot evidence of the final clean AI review results from both fresh reviewers on the current PR diff or current HEAD after the latest code changes.

Does this PR introduce any user-facing change?

  • Does this PR introduce any public API change?
  • Does this PR introduce any binary protocol compatibility change?

Benchmark

@chaokunyang chaokunyang requested review from pandalee99 and urlyy April 29, 2026 15:43
@chaokunyang chaokunyang force-pushed the support_nested_container_field_for_csharp branch from 82dbfcc to 23ab3e1 Compare April 29, 2026 15:45
@chaokunyang chaokunyang force-pushed the support_nested_container_field_for_csharp branch from 23ab3e1 to 80abe8c Compare April 29, 2026 15:50
@chaokunyang chaokunyang force-pushed the support_nested_container_field_for_csharp branch from 80abe8c to 97ce288 Compare April 29, 2026 16:06
@chaokunyang chaokunyang changed the title feat(csharp): support nested schema descriptors feat(csharp): support nested container field codec Apr 29, 2026
@chaokunyang chaokunyang merged commit 03c4c57 into apache:main Apr 29, 2026
49 checks passed
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.

2 participants