【问题标题】:How to handle deserializing avro map type in C#如何在 C# 中处理反序列化 avro 映射类型
【发布时间】: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'sCofluent Kafka's .NET 源代码都可以在 Github 上找到。您可以检查 throw 的方法以了解它的预期
  • 而且 Avro 代码似乎无法处理 嵌套地图。为什么要使用嵌套地图?如果您想存储复杂的对象(JSON 与否),您可以使用记录。检查this SO question
  • @PanagiotisKanavos 是的,问题似乎出在嵌套地图上。我已将其更改为记录映射,并且它已成功反序列化。

标签: c# apache-kafka avro confluent-schema-registry confluent-platform


【解决方案1】:

这是一个问题,因为我们尝试使用嵌套地图,例如 @PanagiotisKanavos。

将架构更改为使用记录类型映射解决了我的问题。

感谢您的帮助

【讨论】:

    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2017-08-07
    • 2012-10-01
    • 2021-09-18
    • 2013-03-19
    相关资源
    最近更新 更多