Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 10 additions & 9 deletions src/AvroConvert/AvroObjectServices/Read/Resolvers/Record.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#region license
#region license

/**Copyright (c) 2023 Adrian Strugała
*
Expand Down Expand Up @@ -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);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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[]
{
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; }
}
}
}
Loading