From 730ecadd714bc85863e45222980ba948c2d37248 Mon Sep 17 00:00:00 2001 From: Robert Coltheart Date: Fri, 10 Jul 2026 15:51:20 +1000 Subject: [PATCH 1/2] Fix reading records when additional fields exist and should be skipped --- .../Read/Resolvers/Record.cs | 19 ++--- .../ClassesWithMismatchedFieldsTests.cs | 79 +++++++++++++++++++ 2 files changed, 89 insertions(+), 9 deletions(-) create mode 100644 tests/AvroConvertTests/FullSerializationAndDeserialization/ClassesWithMismatchedFieldsTests.cs diff --git a/src/AvroConvert/AvroObjectServices/Read/Resolvers/Record.cs b/src/AvroConvert/AvroObjectServices/Read/Resolvers/Record.cs index 70f031f..9027e37 100644 --- a/src/AvroConvert/AvroObjectServices/Read/Resolvers/Record.cs +++ b/src/AvroConvert/AvroObjectServices/Read/Resolvers/Record.cs @@ -1,4 +1,4 @@ -#region license +#region license /**Copyright (c) 2023 Adrian Strugała * @@ -97,15 +97,16 @@ protected virtual object ResolveRecord( if (readStepValue.ShouldSkip) { _skipper.Skip(readStepValue.WriteFieldSchema.TypeSchema, reader); - break; } - - accessor[result, readStep.Key] = - GetValue( - readStepValue.WriteFieldSchema, - readStepValue.ReadFieldSchema, - readStepValue.MemberInfo, - reader); + else + { + accessor[result, readStep.Key] = + GetValue( + readStepValue.WriteFieldSchema, + readStepValue.ReadFieldSchema, + readStepValue.MemberInfo, + reader); + } } } diff --git a/tests/AvroConvertTests/FullSerializationAndDeserialization/ClassesWithMismatchedFieldsTests.cs b/tests/AvroConvertTests/FullSerializationAndDeserialization/ClassesWithMismatchedFieldsTests.cs new file mode 100644 index 0000000..4d30178 --- /dev/null +++ b/tests/AvroConvertTests/FullSerializationAndDeserialization/ClassesWithMismatchedFieldsTests.cs @@ -0,0 +1,79 @@ +using SolTechnology.Avro; +using Xunit; + +namespace AvroConvertComponentTests.FullSerializationAndDeserialization +{ + public class ClassesWithMismatchedFieldsTests + { + [Fact] + public void Write_schema_with_additional_field_in_array_can_be_read() + { + //Arrange + var write = new WriteModel + { + Models = + [ + new WriteModelWithAdditionalField + { + StringValue = "string value", + DecimalValue = 123.456m, + IntValue = 10 + }, + new WriteModelWithAdditionalField + { + StringValue = "string value", + DecimalValue = 123.456m, + IntValue = 10 + } + ], + FinalField = 456.789m + }; + + var writeSchema = AvroConvert.GenerateSchema(typeof(WriteModel)); + var readSchema = AvroConvert.GenerateSchema(typeof(ReadModel)); + + //Act + var serialized = AvroConvert.SerializeHeadless(write, writeSchema); + var result = AvroConvert.DeserializeHeadless(serialized, writeSchema, readSchema, typeof(ReadModel)) as ReadModel; + + //Assert + Assert.NotNull(result); + Assert.Equal(2, result.Models.Length); + Assert.Equal("string value", result.Models[0].StringValue); + Assert.Equal(10, result.Models[0].IntValue); + Assert.Equal("string value", result.Models[1].StringValue); + Assert.Equal(10, result.Models[1].IntValue); + Assert.Equal(456.789m, result.FinalField); + } + + public class WriteModel + { + public WriteModelWithAdditionalField[] Models { get; set; } + + public decimal FinalField { get; set; } + } + + public class WriteModelWithAdditionalField + { + public string StringValue { get; set; } + + public decimal DecimalValue { get; set; } + + public int IntValue { get; set; } + } + + public class ReadModel + { + public ReadModelWithMissingField[] Models { get; set; } + + public decimal FinalField { get; set; } + } + + public class ReadModelWithMissingField + { + public string StringValue { get; set; } + + public int IntValue { get; set; } + } + } +} From b66ce050470215af3bf4ec1f326f492eb64ef79d Mon Sep 17 00:00:00 2001 From: Robert Coltheart Date: Fri, 10 Jul 2026 16:04:03 +1000 Subject: [PATCH 2/2] Fix collection language usage --- .../ClassesWithMismatchedFieldsTests.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/AvroConvertTests/FullSerializationAndDeserialization/ClassesWithMismatchedFieldsTests.cs b/tests/AvroConvertTests/FullSerializationAndDeserialization/ClassesWithMismatchedFieldsTests.cs index 4d30178..16fce24 100644 --- a/tests/AvroConvertTests/FullSerializationAndDeserialization/ClassesWithMismatchedFieldsTests.cs +++ b/tests/AvroConvertTests/FullSerializationAndDeserialization/ClassesWithMismatchedFieldsTests.cs @@ -11,8 +11,8 @@ public void Write_schema_with_additional_field_in_array_can_be_read() //Arrange var write = new WriteModel { - Models = - [ + Models = new[] + { new WriteModelWithAdditionalField { StringValue = "string value", @@ -25,7 +25,7 @@ public void Write_schema_with_additional_field_in_array_can_be_read() DecimalValue = 123.456m, IntValue = 10 } - ], + }, FinalField = 456.789m };