是否有类似Protobuf-net的工具可从C#类自动生成Avro schema
C# 类自动生成Avro Schema工具说明
现有成熟工具可完全匹配你的需求,和Protobuf-net的使用逻辑一致,通过给C#类、属性添加对应特性标记,就可以直接从代码提取信息自动生成Avro Schema,无需手动编写schema文件。
主流实现方案:Apache Avro 官方.NET库
这是目前最通用的实现,Apache官方维护的Apache.Avro NuGet包自带了完整的特性标记体系和Schema生成能力,使用方式和你提供的Protobuf示例高度相似:
- 给需要生成Schema的类添加
[AvroRecord]特性,对应Protobuf的[ProtoContract] - 给类的属性添加
[AvroField(序号)]特性,对应Protobuf的[ProtoMember(序号)],序号用来定义Avro Schema的字段顺序
对应示例代码
// 引用Apache.Avro包后即可使用对应特性 [AvroRecord] class Person { [AvroField(0)] public int Id {get;set;} [AvroField(1)] public string Name {get;set;} [AvroField(2)] public Address Address {get;set;} } // 关联的Address类同样加对应标记即可 [AvroRecord] class Address { [AvroField(0)] public string Street {get;set;} [AvroField(1)] public string City {get;set;} }
Schema生成方法
直接调用库提供的生成方法即可得到完整的Avro Schema字符串:var avroSchema = Avro.Schema.GenerateSchema(typeof(Person)).ToString();
其他可选能力
- 支持给字段添加别名、默认值、可选标记等配置,满足不同的Schema定义需求
- 如果是Kafka相关的Avro使用场景,Confluent官方的Avro序列化包完全兼容这套特性,还支持自动将生成的Schema注册到Schema Registry,无需额外手动操作
内容的提问来源于stack exchange,提问作者xichen
相关产品推荐
相关产品推荐

