- Add BINARY_FORMAT.md: full AcBinary wire format spec (markers, encoding, options, protocol, interactions) - Reference BINARY_FORMAT.md from GLOSSARY.md, Binaries/README.md, and Serializers/Binaries/README.md; add new glossary terms - Clarify and expand config options tables to match new doc - Add/clarify LLM maintenance rules: always sync .md files with code, auto-fix discrepancies - Update root README.md: AyCode.Core targets .NET 9, not 10; stress doc/code sync - Add code reuse and doc sync conventions to copilot-instructions.md and CONVENTIONS.md - Add docs/ folder and BINARY_FORMAT.md to solution as Solution Items - Minor clarifications and cross-links in ARCHITECTURE.md and other docs |
||
|---|---|---|
| .. | ||
| AcJsonContextBase.cs | ||
| AcJsonDeserializationException.cs | ||
| AcJsonDeserializer.JsonDeserializationContext.cs | ||
| AcJsonDeserializer.JsonDeserializeTypeMetadata.cs | ||
| AcJsonDeserializer.JsonElement.cs | ||
| AcJsonDeserializer.Primitives.cs | ||
| AcJsonDeserializer.Utf8Reader.cs | ||
| AcJsonDeserializer.cs | ||
| AcJsonSerializer.JsonSerializationContext.cs | ||
| AcJsonSerializer.JsonSerializeTypeMetadata.cs | ||
| AcJsonSerializer.cs | ||
| AcJsonSerializerOptions.cs | ||
| JsonPropertyAccessorBase.cs | ||
| JsonPropertySetterBase.cs | ||
| MergeContractResolver.cs | ||
| README.md | ||
README.md
Jsons
Custom JSON serialization/deserialization built on System.Text.Json's Utf8JsonWriter/Utf8JsonReader, optimized for IId reference handling and polymorphic types.
Architecture
- Reference scanning phase (pre-visit) detects multi-referenced objects before serialization.
- Uses
$id/$refJSON properties for circular reference handling (JSON standard). - Polymorphic type hints via typename property.
- Context pooling for allocation efficiency.
Key Files
Serialization
AcJsonSerializer.cs— Main serializer entry point, context pool management.AcJsonSerializer.JsonSerializationContext.cs— Core serialization logic withUtf8JsonWriter.AcJsonSerializer.JsonSerializeTypeMetadata.cs— Cached type metadata for serialization.AcJsonSerializerOptions.cs— Configuration and presets.
Deserialization
AcJsonDeserializer.cs— Main deserializer entry point.AcJsonDeserializer.JsonDeserializationContext.cs— Core deserialization logic.AcJsonDeserializer.JsonDeserializeTypeMetadata.cs— Cached type metadata for deserialization.AcJsonDeserializer.JsonElement.cs—JsonElementprocessing.AcJsonDeserializer.Primitives.cs— Primitive type conversions.AcJsonDeserializer.Utf8Reader.cs—Utf8JsonReaderoperations.
Supporting
AcJsonContextBase.cs— Base context shared between serializer and deserializer.JsonPropertyAccessorBase.cs— Property accessor for serialization.JsonPropertySetterBase.cs— Property setter for deserialization.MergeContractResolver.cs— Contract resolution for merge/populate operations.AcJsonDeserializationException.cs— Rich exception with JSON context, type info, and original exception.
Configuration
| Option | Description |
|---|---|
ReferenceHandling |
All required — OnlyId not fully implemented for JSON |
MaxDepth |
Maximum object graph depth |
ThrowOnCircularReference |
Throw vs silently handle circular refs |
Presets: Default (with refs), ShallowCopy, WithMaxDepth, WithoutReferenceHandling.
Dependencies
- Base classes from parent
Serializers/folder System.Text.Json(Utf8JsonWriter,Utf8JsonReader,JsonElement)