【发布时间】:2019-11-20 20:41:42
【问题描述】:
使用 .net confluent kafka 客户端处理项目,反序列化 avro 映射类型时出现异常。有没有办法在 c# 中做到这一点?
该项目正在生产和使用来自 kafka 的消息。使用地图类型以外的任何东西都没有问题。
Avro 架构 sn-p:
{
"name": "DurationMargins",
"type": {
"type": "map",
"values": {
"type": "map",
"values": "double"
}
}
},
Avrogen 以此创建以下属性:
private IDictionary<string,IDictionary<string,System.Double>> _DurationMargins;
但是当尝试从 Kafka 中消费消息时,会收到以下异常:
Avro.AvroException : Unable to find type IDictionary<string,System.Double> in all loaded assemblies in field DurationMargins
【问题讨论】:
-
为什么不能反序列化成合适的模型类?
-
发布您的代码。你是如何尝试反序列化数据的?
IDictionary是一个接口,不是可以实例化的类 -
同时发布
Exception.ToString()返回的full异常文本。这包括调用堆栈和任何内部异常,它们确切地显示哪个方法引发了异常。 Avro's 和 Cofluent Kafka's .NET 源代码都可以在 Github 上找到。您可以检查 throw 的方法以了解它的预期 -
而且 Avro 代码似乎无法处理 嵌套地图。为什么要使用嵌套地图?如果您想存储复杂的对象(JSON 与否),您可以使用记录。检查this SO question
-
@PanagiotisKanavos 是的,问题似乎出在嵌套地图上。我已将其更改为记录映射,并且它已成功反序列化。
标签: c# apache-kafka avro confluent-schema-registry confluent-platform