AyCode.Core/AyCode.Core.Serializers.Sou.../README.md

35 lines
1.7 KiB
Markdown

# AyCode.Core.Serializers.SourceGenerator
Roslyn incremental source generator that produces optimized `IGeneratedBinaryWriter` and `IGeneratedBinaryReader` implementations for types marked with `[AcBinarySerializable]`. Eliminates runtime reflection on serialization hot paths.
Targets **netstandard2.0** (required for Roslyn analyzers/generators).
## Key Files
- **`AcBinarySourceGenerator.cs`** — Single-file `IIncrementalGenerator` (~2100 lines). Generates:
- `{ClassName}_GeneratedWriter` — Per-type writer with `ScanObject()` + `WriteProperties()` methods. Handles primitives, strings (with interning), collections, dictionaries, complex nested types, and polymorphic objects.
- `{ClassName}_GeneratedReader` — Per-type reader with `ReadProperties()` method.
- `ModuleInitializer` — Auto-registers all generated writers/readers at startup.
- Circular reference detection with `ACBIN001` diagnostic warning.
## Feature Flags
The `[AcBinarySerializable]` attribute supports per-type feature control:
- `enableMetadata` — Property hash metadata for cross-type deserialization
- `enableIdTracking` — IId-based reference tracking
- `enableRefHandling` — General reference tracking
- `enableInternString` — String interning/deduplication
Disabled features eliminate corresponding code blocks from generated output (zero dead code).
## Dependencies
| Dependency | Purpose |
|---|---|
| `Microsoft.CodeAnalysis.CSharp` | Roslyn syntax/semantic APIs |
| `Microsoft.CodeAnalysis.Analyzers` | Analyzer best practices |
---
> **LLM Maintenance:** If you modify code in this folder, update this README to reflect the changes. If you notice the README content does not match the current code, automatically update the README to match the code.