AvroSharp 0.2.0
dotnet add package AvroSharp --version 0.2.0
NuGet\Install-Package AvroSharp -Version 0.2.0
<PackageReference Include="AvroSharp" Version="0.2.0" />
<PackageVersion Include="AvroSharp" Version="0.2.0" />
<PackageReference Include="AvroSharp" />
paket add AvroSharp --version 0.2.0
#r "nuget: AvroSharp, 0.2.0"
#:package AvroSharp@0.2.0
#addin nuget:?package=AvroSharp&version=0.2.0
#tool nuget:?package=AvroSharp&version=0.2.0
AvroSharp
A high-performance .NET implementation of the Apache Avro™ specification: schemas, binary and JSON encoding, schema resolution, object container files and single-object encoding. It is written for spans and IBufferWriter<byte>, allocates little, and needs no reflection, so it works with Native AOT and trimming.
Status: an early preview (0.x). The API may still change before 1.0.
Documentation · API reference · Code generation · Benchmarks · Compared with Apache.Avro
Targets net10.0, net9.0, net8.0, netstandard2.1 and netstandard2.0.
Getting started
Parse a schema, then write and read values of it with the generic data model. AvroValue holds any Avro value without boxing, and a GenericRecord holds a record's fields by name or position.
using AvroSharp.Generic;
using AvroSharp.Schemas;
var schema = (RecordSchema)AvroSchema.Parse("""
{"type":"record","name":"User","namespace":"example","fields":[
{"name":"id","type":"int"},
{"name":"name","type":"string"}]}
""");
var user = new GenericRecord(schema) { ["id"] = 1, ["name"] = "Ada" };
byte[] bytes = GenericDatumWriter.Create(schema).WriteToArray(user);
GenericRecord copy = GenericDatumReader.Create(schema).Read(bytes).AsRecord();
Schema evolution. Data written with one version of a schema can be read as another: GenericDatumReader.Create(writerSchema, readerSchema). Fields are matched by name or alias, removed fields are skipped, added fields take their defaults, and numbers are promoted. Readers and writers are cached per schema (or schema pair) and are thread-safe.
JSON. GenericDatumJsonWriter and GenericDatumJsonReader implement the specification's JSON encoding.
Object container files
using var writer = AvroFileWriter.CreateGeneric(stream, schema, new AvroFileWriterOptions { Codec = AvroCodec.Deflate });
writer.Write(user);
using var reader = AvroFileReader.OpenGeneric(stream);
foreach (var value in reader.ReadAll()) { ... }
Asynchronous reading and writing are available too (OpenGenericAsync, ReadAllAsync). null and deflate are built in; the AvroSharp.Codecs package adds snappy, zstandard, bzip2 and xz.
Single-object encoding and streams
AvroMessage and AvroMessageReader write and read single-object encoded messages, with a schema store that finds the writer schema by fingerprint. AvroStreamWriter and AvroStreamReader handle a stream of values without a container.
C# types from schema files
The AvroSharp.Generators package generates C# classes from .avsc files at build time, with serializers that call AvroWriter/AvroReader directly:
byte[] bytes = order.ToAvroBytes();
var copy = shop.Order.FromAvroBytes(bytes);
More
- Documentation and samples
- Changelog
- Third-party notices (also in the package)
- Licensed under the MIT license.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Bcl.AsyncInterfaces (>= 10.0.12)
- System.Memory (>= 4.6.3)
- System.Text.Json (>= 10.0.12)
- System.Threading.Channels (>= 10.0.12)
-
.NETStandard 2.1
- System.Text.Json (>= 10.0.12)
- System.Threading.Channels (>= 10.0.12)
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages (3)
Showing the top 3 NuGet packages that depend on AvroSharp:
| Package | Downloads |
|---|---|
|
AvroSharp.Generators
Source generator for AvroSharp: C# types and allocation-free serializers from Apache Avro™ schema files (.avsc). |
|
|
AvroSharp.Codecs
The snappy, zstandard, bzip2 and xz codecs for AvroSharp object container files, on fully managed libraries. |
|
|
AvroSharp.CodeGen
C# code generation from Apache Avro™ schemas, used by the AvroSharp source generator and tools. |
GitHub repositories
This package is not used by any popular GitHub repositories.