嗨,我正在工作Confluent kafka。我有返回通用记录的使用者。我想反序列化它。我没有找到任何办法。我可以手动完成每个字段,例如
object options = ((GenericRecord)response.Message.Value["Product"])["Options"];
我在这里找到了一个
Deserialize an Avro file with C# 但是如何将架构转换为流? 我想知道是否可以使用任何解决方案将序列化到我们的C#模型中?任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
假设您正在使用confluent-dot-net
客户端,则可以使用AvroDeserializer
:
(异步)Avro解串器。将此解串器与
GenericRecord
一起使用, 使用avrogen.exe
工具或以下之一生成的类型 基本类型:int
,long
,float
,double
,boolean
,string
,byte[]
。
var consumeTask = Task.Run(() =>
{
using (var schemaRegistry = new CachedSchemaRegistryClient(new SchemaRegistryConfig { SchemaRegistryUrl = schemaRegistryUrl }))
using (var consumer =
new ConsumerBuilder<string, GenericRecord>(new ConsumerConfig { BootstrapServers = bootstrapServers, GroupId = groupName })
.SetKeyDeserializer(new AvroDeserializer<string>(schemaRegistry).AsSyncOverAsync())
.SetValueDeserializer(new AvroDeserializer<GenericRecord>(schemaRegistry).AsSyncOverAsync())
.SetErrorHandler((_, e) => Console.WriteLine($"Error: {e.Reason}"))
.Build())
{
consumer.Subscribe(topicName);
try
{
while (true)
{
try
{
var consumeResult = consumer.Consume(cts.Token);
Console.WriteLine($"Key: {consumeResult.Message.Key}\nValue: {consumeResult.Value}");
}
catch (ConsumeException e)
{
Console.WriteLine($"Consume error: {e.Error.Reason}");
}
}
}
catch (OperationCanceledException)
{
// commit final offsets and leave the group.
consumer.Close();
}
}
});