Major overhaul for SignalR response pipeline: - All deserialization now uses byte[] (offset/length) for zero-copy, allocation-free operation; all span/memory overloads removed. - SignalR protocol sends (signalParams, object) directly; SignalData envelope and related logic removed. - Server sets SignalParams.SignalDataType so protocol deserializes to the correct runtime type on the client. - SignalResponseDataMessage now only used for client request/response tracking and stream path; RawResponseData holds the actual object. - All extension methods, helpers, and infrastructure updated to use new byte[]-based APIs. - AcSignalRDataSource and all test/benchmark code updated for new object flow. - Removes all diagnostics, logging, and error handling related to binary envelopes. - Enables true zero-copy, type-safe, allocation-free SignalR response handling. |
||
|---|---|---|
| .. | ||
| CollectionExtensions.cs | ||
| CollectionExtensionsInt.cs | ||
| EnumExtensions.cs | ||
| ExceptionExtensions.cs | ||
| GuidExtensions.cs | ||
| README.md | ||
| SerializeObjectExtensions.cs | ||
README.md
Extensions
Extension methods for collections, serialization, and common utilities.
Key Files
CollectionExtensions.cs—IList<T>extensions forIId<Guid>entities:UpdateCollection()(add/update/remove withTrackingState),FindIndex(),BinarySearch(), safe indexing.CollectionExtensionsInt.cs— Same as above but forIId<int>entities.SerializeObjectExtensions.cs— Unified serialization API via extension methods:.ToJson(),.JsonTo<T>()— JSON serialization (Newtonsoft + customHybridReferenceResolverwith Base62 semantic IDs).ToBinary(),.BinaryTo<T>()— Binary serialization.CloneTo<TDest>(),.CopyTo()— Object cloning.JsonToChain<T>(),.BinaryToChain<T>()— Multi-deserialize chains.BinaryToMerge<T>()— IId-aware collection merging- Includes:
JsonReferencePostProcessor(strips unreferenced$id),PooledStringWriter(StringBuilder pooling)
EnumExtensions.cs—GetDisplayName()viaDisplayAttributereflection.ExceptionExtensions.cs—GetCategoryAndMemberNameFromStackTraceString()for structured caller info extraction.GuidExtensions.cs—IsNullOrEmpty()forGuidandGuid?with[NotNullWhen]annotations.