A high-performance polymorphic binary serializer for .NET, designed for distributed systems with support for surrogates and version tolerance.
Wire is a high-performance polymorphic binary serializer for the .NET framework, designed to safely transfer messages in distributed systems like service buses or actor models. It solves issues where type information is lost during serialization by encoding manifests for each value, ensuring objects deserialize to their exact original types. Unlike strict contract-based serializers, Wire supports polymorphism and contextual objects via surrogates.
.NET developers building distributed systems, message-based architectures, or actor model frameworks (e.g., Akka.NET) who need reliable type preservation across service boundaries.
Developers choose Wire for its blend of polymorphism, performance, and safety in distributed scenarios, offering features like surrogates for contextual objects and multiple version tolerance modes not always available in other binary serializers.
Binary serializer for POCO objects
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Encodes manifests for each value, ensuring that types like float vs. double are preserved in untyped properties, as shown in the polymorphic serialization example to prevent type loss.
Uses surrogates to serialize context-bound objects, enabling frameworks like Akka.NET to handle actor references by defining translation to and from serializable representations.
Designed with performance as a priority, benchmarks show competitive serialization speeds, outperforming alternatives like Protobuf.NET and JSON.NET in tests for POCO objects.
Offers multiple modes including pre-registered, non-versioned, and versioned, allowing teams to balance performance with schema evolution for added or removed fields.
Archived due to security issues where surrogates can be exploited to create arbitrary types during deserialization, similar to BinaryFormatter risks, as noted in the security advisory.
Explicitly stated as unsuitable for long-term storage like event sourcing, as it's optimized for point-to-point messaging, lacking true version tolerance formats like Protobuf.
Still in beta with potential breaking changes to API and serialization format, making it unreliable for stable production deployments, as warned in the README.
Non-versioned and versioned modes produce larger payloads (up to 195 bytes in tests) compared to pre-registered types, impacting network efficiency in distributed systems.