ch-robinson / dotnet-avro

An Avro implementation for .NET
https://engineering.chrobinson.com/dotnet-avro/
MIT License
134 stars 49 forks source link

Fix possible dynamic binding exception in Schema Registry serializer #249

Closed dstelljes closed 1 year ago

dstelljes commented 1 year ago

When building Schema Registry serializers for dynamic types, serialization may fail:

using var builder = new SchemaRegistrySerializerBuilder(registry);
var context = new SerializationContext(MessageComponentType.Value, "some-topic");
var serializer = await builder.Build<dynamic>(schemaId);

dynamic value = new ExpandoObject();
value.Field = "some text";

serializer.Serialize(value, context);
Error:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform runtime binding on a null reference
   at CallSite.Target(Closure , CallSite , ExpandoObject )
   at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
   at ExampleRecord serializer(Closure , ExpandoObject , BinaryWriter )
   at Chr.Avro.Confluent.DelegateSerializer`1.Serialize(T data, SerializationContext context)