Serialization Method Comparison

Read time 6 minutes
On this page

Detailed method-level comparison for SerializerComparisonBenchmarks, including compared libraries, API mapping, performance snapshots, and detailed metrics.

Compared Libraries & APIs

LibraryBenchmark MethodSimplified API Signature
LiteSerializerLiteSerializer_SerializeLiteSerializer.Serialize(payload)
LiteSerializerLiteSerializer_Serialize_SpanLiteSerializer.Serialize(payload, span)
LiteSerializerLiteSerializer_DeserializeLiteSerializer.Deserialize<BenchPayload>(bytes)
MemoryPackMemoryPack_SerializeMemoryPackSerializer.Serialize(payload)
MemoryPackMemoryPack_Serialize_SpanMemoryPackSerializer.Serialize(writer, payload)
MemoryPackMemoryPack_DeserializeMemoryPackSerializer.Deserialize<BenchPayload>(bytes)
MessagePackMessagePack_SerializeMessagePackSerializer.Serialize(payload)
MessagePackMessagePack_DeserializeMessagePackSerializer.Deserialize<BenchPayload>(bytes)
System.Text.JsonSystemTextJson_SerializeJsonSerializer.SerializeToUtf8Bytes(payload)
System.Text.JsonSystemTextJson_DeserializeJsonSerializer.Deserialize<BenchPayload>(bytes)

Performance Snapshot

Overview of the fastest serialization and deserialization methods at different payload scales (16, 128, and 1024 items).

Item CountFastest SerializeFastest DeserializeNotes
16MemoryPack Span (24.92 ns)LiteSerializer (69.28 ns)LiteSerializer Span is close at 29.10 ns. MemoryPack deserialization is 75.13 ns.
128MemoryPack Span (28.65 ns)LiteSerializer (115.40 ns)LiteSerializer Span is close at 31.85 ns. MemoryPack deserialization is 118.78 ns.
1024MemoryPack Span (54.11 ns)LiteSerializer (423.75 ns)LiteSerializer Span is close at 57.31 ns. MemoryPack deserialization is 448.05 ns.

Detailed Results

Full metrics comparison across all libraries and payload sizes from the BenchmarkDotNet reports.

Detailed Results (Item Count = 16)

MethodMeanErrorStdDevP95Gen0Gen1Gen2Allocated
LiteSerializer_Serialize63.19 ns1.319 ns1.760 ns65.44 ns0.0057--216 B
LiteSerializer_Serialize_Span29.10 ns0.350 ns0.467 ns29.85 ns---0 B
MemoryPack_Serialize54.13 ns0.466 ns0.622 ns54.97 ns0.0058--216 B
MemoryPack_Serialize_Span24.92 ns0.235 ns0.313 ns25.42 ns---0 B
MessagePack_Serialize89.78 ns0.686 ns0.916 ns91.29 ns0.0044--168 B
SystemTextJson_Serialize251.25 ns2.910 ns3.885 ns257.10 ns0.0143--536 B
LiteSerializer_Deserialize69.28 ns3.914 ns5.224 ns76.09 ns0.0108--408 B
MemoryPack_Deserialize75.13 ns4.133 ns5.518 ns80.58 ns0.0117--440 B
MessagePack_Deserialize162.24 ns1.204 ns1.566 ns164.84 ns0.0117--440 B
SystemTextJson_Deserialize508.44 ns5.618 ns7.500 ns520.34 ns0.0267--1008 B

Detailed Results (Item Count = 128)

MethodMeanErrorStdDevP95Gen0Gen1Gen2Allocated
LiteSerializer_Serialize120.74 ns1.404 ns1.825 ns123.45 ns0.0176--664 B
LiteSerializer_Serialize_Span31.85 ns0.314 ns0.409 ns32.65 ns---0 B
MemoryPack_Serialize101.30 ns5.116 ns6.830 ns107.10 ns0.0178--664 B
MemoryPack_Serialize_Span28.65 ns0.239 ns0.311 ns29.24 ns---0 B
MessagePack_Serialize380.82 ns2.692 ns3.501 ns386.04 ns0.0134--504 B
SystemTextJson_Serialize785.81 ns6.164 ns8.229 ns800.89 ns0.0277--1056 B
LiteSerializer_Deserialize115.40 ns6.307 ns8.419 ns124.23 ns0.0229--856 B
MemoryPack_Deserialize118.78 ns2.049 ns2.516 ns121.88 ns0.0237--888 B
MessagePack_Deserialize934.29 ns5.249 ns7.007 ns945.56 ns0.0229--888 B
SystemTextJson_Deserialize2,112.12 ns18.254 ns24.369 ns2,152.67 ns0.0496--1976 B

Detailed Results (Item Count = 1024)

MethodMeanErrorStdDevP95Gen0Gen1Gen2Allocated
LiteSerializer_Serialize538.97 ns5.757 ns7.686 ns549.54 ns0.1163--4280 B
LiteSerializer_Serialize_Span57.31 ns0.456 ns0.609 ns58.36 ns---0 B
MemoryPack_Serialize406.91 ns23.217 ns30.994 ns431.30 ns0.1116--4248 B
MemoryPack_Serialize_Span54.11 ns0.367 ns0.489 ns54.86 ns---0 B
MessagePack_Serialize2,536.02 ns18.638 ns24.881 ns2,573.17 ns0.0839--3192 B
SystemTextJson_Serialize5,184.75 ns42.813 ns57.153 ns5,269.06 ns0.1602--5968 B
LiteSerializer_Deserialize423.75 ns9.611 ns12.830 ns446.78 ns0.1206-0.00054440 B
MemoryPack_Deserialize448.05 ns16.775 ns21.812 ns484.71 ns0.1206--4472 B
MessagePack_Deserialize7,083.24 ns45.454 ns60.680 ns7,172.78 ns0.1144--4472 B
SystemTextJson_Deserialize15,276.89 ns115.989 ns154.842 ns15,524.26 ns0.2441--9216 B

Key Takeaways

  • LiteSerializer vs. MemoryPack: LiteSerializer is exceptionally fast and leads MemoryPack in deserialization across all tested payload sizes:
    • Deserialization: LiteSerializer outperforms MemoryPack at all scales (69.28 ns vs 75.13 ns for 16 items; 115.40 ns vs 118.78 ns for 128 items; 423.75 ns vs 448.05 ns for 1024 items).
    • Serialization: LiteSerializer_Serialize_Span delivers zero heap allocation (0 B) and runs nearly identically to MemoryPack_Serialize_Span (29.10 ns vs 24.92 ns at 16; 31.85 ns vs 28.65 ns at 128; 57.31 ns vs 54.11 ns at 1024).
  • MessagePack & JSON: LiteSerializer significantly outperforms MessagePack (by 3x-16x in speed) and System.Text.Json (by 8x-36x in speed), while dramatically reducing memory allocation.