C# Avro序列化将数据结构反序列化为基类型

C# Avro序列化将数据结构反序列化为基类型,c#,serialization,avro,C#,Serialization,Avro,我想知道使用Avro序列化是否可以序列化类型并反序列化到基类型? 例如,如果我运行以下测试,我会得到算术运算溢出异常: [DataContract(Name = "BaseMessage")] public class BaseMessage { [DataMember(Name = "Id")] public Guid Id { get; set; } [DataMember(Name = "Topic")]

我想知道使用Avro序列化是否可以序列化类型并反序列化到基类型? 例如,如果我运行以下测试,我会得到算术运算溢出异常:

    [DataContract(Name = "BaseMessage")]
    public class BaseMessage
    {
        [DataMember(Name = "Id")]
        public Guid Id { get; set; }

        [DataMember(Name = "Topic")]
        public string Topic { get; set; }
    }
    [DataContract(Name = "MyMessage")]
    public class MyMessage : BaseMessage
    {
        [DataMember(Name = "Aggregate", IsRequired=false)]
        public byte[] Aggregate { get; set; }
    }

    public class AvroSPec
    {
        [Fact]
        public void I_class_can_be_serializated_an_then_deserializated_to_its_base_type()
        {
            BaseMessage actual = null;
            var expected = new MyMessage
            {
                Id = Guid.NewGuid(),
                Topic = StringExtensions.RandomString(),
                Aggregate = Encoding.UTF8.GetBytes(StringExtensions.RandomString())//random
            };
            byte[] SerilizedStream = null;
            using (MemoryStream stream = new MemoryStream())
            {
                AvroSerializer.Create<MyMessage>().Serialize(stream, expected);
                SerilizedStream = stream.GetBuffer();
            }
            using (MemoryStream stream = new MemoryStream(SerilizedStream))
            {
                actual = AvroSerializer.Create<BaseMessage>().Deserialize(stream);
            }
            Assert.Equal(actual.Id, expected.Id);
            Assert.Equal(actual.Topic, expected.Topic);
        }
    }
}
[DataContract(Name=“BaseMessage”)]
公共类基消息
{
[数据成员(Name=“Id”)]
公共Guid Id{get;set;}
[DataMember(Name=“Topic”)]
公共字符串主题{get;set;}
}
[DataContract(Name=“MyMessage”)]
公共类MyMessage:BaseMessage
{
[DataMember(Name=“Aggregate”,IsRequired=false)]
公共字节[]聚合{get;set;}
}
公共级AvroSPec
{
[事实]
public void I_class_可以_序列化_然后_反序列化_到它的_base_type()
{
BaseMessage实际值=null;
var expected=newmymessage
{
Id=Guid.NewGuid(),
Topic=StringExtensions.RandomString(),
聚合=Encoding.UTF8.GetBytes(StringExtensions.RandomString())//随机
};
字节[]SerilizedStream=null;
使用(MemoryStream stream=new MemoryStream())
{
AvroSerializer.Create().Serialize(应为流);
SerilizedStream=stream.GetBuffer();
}
使用(MemoryStream stream=新的MemoryStream(SerilizedStream))
{
actual=AvroSerializer.Create().反序列化(流);
}
Assert.Equal(实际的.Id,预期的.Id);
Assert.Equal(actual.Topic、expected.Topic);
}
}
}
提前谢谢