我有一个
.proto
文件,传统上我一直将其与 protogen.exe
一起使用来为相关类生成 .cs
文件。生成的类实现了Protobuf.IExtensible
。但是,我现在需要反序列化来自 Kafka 的 protobuf 数据,该数据来自其模式注册表中具有相同 .proto
文件的主题。据我所见,Confluent.SchemaRegistry.Serdes.ProtobufDeserializer
期望底层类型实现Google.Protobuf.IMessage<T>
。我无法找到链接 IExtensible
和 IMessage
的良好信息。有没有办法让我使用我一直使用的同一个类来反序列化该对象?我已经尝试过Protobuf.Serializer.Deserialize
,它给了我ProtoException
:“源数据中的无效字段:0”。
.NET 代码中经常使用(至少)两个单独的 Protobuf 实现:
IMessage<T>
API,适用于模式优先场景,并且是惯用的 protobuf,恰好出现在 .NET / C# 中如果
Confluent
API 需要 IMessage<T>
,那么您应该使用 Google.Protobuf
库和相关工具来处理模式,并从那里开始工作。这会处理完全相同的二进制有效负载,但 API 有一些差异。