protobuf的反序列化

问题描述 投票:0回答:1

我有一个

.proto
文件,传统上我一直将其与
protogen.exe
一起使用来为相关类生成
.cs
文件。生成的类实现了
Protobuf.IExtensible
。但是,我现在需要反序列化来自 Kafka 的 protobuf 数据,该数据来自其模式注册表中具有相同
.proto
文件的主题。据我所见,
Confluent.SchemaRegistry.Serdes.ProtobufDeserializer
期望底层类型实现
Google.Protobuf.IMessage<T>
。我无法找到链接
IExtensible
IMessage
的良好信息。有没有办法让我使用我一直使用的同一个类来反序列化该对象?我已经尝试过
Protobuf.Serializer.Deserialize
,它给了我
ProtoException
“源数据中的无效字段:0”

c# deserialization protocol-buffers protobuf-net confluent-schema-registry
1个回答
0
投票

.NET 代码中经常使用(至少)两个单独的 Protobuf 实现:

  • Google 自己的实现,具有
    IMessage<T>
    API,适用于模式优先场景,并且是惯用的 protobuf,恰好出现在 .NET / C# 中
  • protobuf-net,第 3 方实现,支持模式优先,但主要针对代码优先场景,并且是惯用的 .NET 序列化,恰好处理 protobuf

如果

Confluent
API 需要
IMessage<T>
,那么您应该使用
Google.Protobuf
库和相关工具来处理模式,并从那里开始工作。这会处理完全相同的二进制有效负载,但 API 有一些差异。

© www.soinside.com 2019 - 2024. All rights reserved.