ch-robinson / dotnet-avro

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

`ArraySegment<T>` deserialization fails on .NET Framework #272

Closed dstelljes closed 11 months ago

dstelljes commented 1 year ago

ArraySegment<T> relies on an implicit conversion not available on Framework:

  Failed Chr.Avro.Serialization.Tests.ArraySerializationTests.ArraySegmentValues(value: [-10, 10, -5, 5, 0]) [2 ms]
  Error Message:
   Chr.Avro.UnsupportedTypeException : Failed to map ArraySchema[LongSchema] to System.ArraySegment`1[System.Int64].
---- System.InvalidOperationException : No coercion operator is defined between types 'System.Int64[]' and 'System.ArraySegment`1[System.Int64]'.
  Stack Trace:
     at Chr.Avro.Serialization.BinaryArrayDeserializerBuilderCase.BuildExpression(Type type, Schema schema, BinaryDeserializerBuilderContext context) in D:\a\dotnet-avro\dotnet-avro\src\Chr.Avro.Binary\Serialization\BinaryArrayDeserializerBuilderCase.cs:line 138
   at Chr.Avro.Serialization.BinaryDeserializerBuilder.BuildExpression(Type type, Schema schema, BinaryDeserializerBuilderContext context) in D:\a\dotnet-avro\dotnet-avro\src\Chr.Avro.Binary\Serialization\BinaryDeserializerBuilder.cs:line 139
   at Chr.Avro.Serialization.BinaryDeserializerBuilder.BuildDelegateExpression[T](Schema schema, BinaryDeserializerBuilderContext context) in D:\a\dotnet-avro\dotnet-avro\src\Chr.Avro.Binary\Serialization\BinaryDeserializerBuilder.cs:line 118
   at Chr.Avro.Serialization.BinaryDeserializerBuilder.BuildDelegate[T](Schema schema, BinaryDeserializerBuilderContext context) in D:\a\dotnet-avro\dotnet-avro\src\Chr.Avro.Binary\Serialization\BinaryDeserializerBuilder.cs:line 106
   at Chr.Avro.Serialization.Tests.ArraySerializationTests.ArraySegmentValues(Int64[] value) in D:\a\dotnet-avro\dotnet-avro\tests\Chr.Avro.Binary.Tests\ArraySerializationTests.cs:line 81
----- Inner Stack Trace -----
   at System.Linq.Expressions.Expression.GetUserDefinedCoercionOrThrow(ExpressionType coercionType, Expression expression, Type convertToType)
   at Chr.Avro.Serialization.ExpressionBuilder.BuildStaticConversion(Expression value, Type target) in D:\a\dotnet-avro\dotnet-avro\src\Chr.Avro\Serialization\ExpressionBuilder.cs:line 102
   at Chr.Avro.Serialization.ArrayDeserializerBuilderCase.BuildStaticConversion(Expression value, Type target) in D:\a\dotnet-avro\dotnet-avro\src\Chr.Avro\Serialization\ArrayDeserializerBuilderCase.cs:line 88
   at Chr.Avro.Serialization.ExpressionBuilder.BuildConversion(Expression value, Type target) in D:\a\dotnet-avro\dotnet-avro\src\Chr.Avro\Serialization\ExpressionBuilder.cs:line 53
   at Chr.Avro.Serialization.BinaryArrayDeserializerBuilderCase.BuildExpression(Type type, Schema schema, BinaryDeserializerBuilderContext context) in D:\a\dotnet-avro\dotnet-avro\src\Chr.Avro.Binary\Serialization\BinaryArrayDeserializerBuilderCase.cs:line 133