AyCode.Core/AyCode.Core.Serializers.Sou...
Loretta fbe142c6f3 Add detailed README.md files for all projects and folders
Added comprehensive README.md documentation to every project and subfolder in the solution. Each README describes the purpose, key files, structure, dependencies, and design patterns for its area. This improves codebase navigability and maintainability, and includes a maintenance note to keep docs in sync with future code changes.
2026-03-28 17:24:56 +01:00
..
AcBinarySourceGenerator.cs Optimize scan codegen with compile-time property checks 2026-03-10 18:35:25 +01:00
AyCode.Core.Serializers.SourceGenerator.csproj Add AcBinary Source Generator for fast serialization 2026-01-06 08:58:34 +01:00
README.md Add detailed README.md files for all projects and folders 2026-03-28 17:24:56 +01:00

README.md

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.