C# Avro序列化将数据结构反序列化为基类型
我想知道使用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")]
[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);
}
}
}
提前谢谢