Java 使用Avro的嵌套特定类型反序列化

Java 使用Avro的嵌套特定类型反序列化,java,serialization,deserialization,apache-kafka,avro,Java,Serialization,Deserialization,Apache Kafka,Avro,下面是我用来生成Avro类的模式的相关部分 {"namespace": "com.namespace.kafka.event", "type": "record", "name": "RecordName", "fields": [ // some fields declared ... {"name": "products", "type": { "type": "array", "items": { "name":

下面是我用来生成Avro类的模式的相关部分

{"namespace": "com.namespace.kafka.event",
 "type": "record",
 "name": "RecordName",
 "fields": [

    // some fields declared
    ...

    {"name": "products", "type": { "type": "array", "items": 
        {
            "name": "productInfo",
            "type": "record",
            "fields" : [
                {"name": "productId", "type": "int"},
                {"name": "productScore", "type": "float"}
            ]
        }
    }
},

// some more fields declared
...
] }

我能够为这个模式生成类并填充它们。因此,在生成过程中,基本上会生成一个名为productInfo的新类,它满足我的需要。(稍后我将数据发送给卡夫卡)。问题在于反序列化。我用的是这样的东西:

GenericData.Array<String> productTuple = (GenericData.Array<String>) record.get("products");
我可以解析这个字符串并得到我想要的,但是有没有一种更“Avro”的方法来做到这一点。我可以像这样将结果再次强制转换到GenericRecord对象

GenericData.Array<GenericRecord> productTuple = (GenericData.Array<GenericRecord>) record.get("products");
GenericData.Array productTuple=(GenericData.Array)record.get(“产品”);
或者,如果productInfo是从我的avro架构生成的类,那么这是否有效:

GenericData.Array<productInfo> productTuple = (GenericData.Array<productInfo>) 
GenericData.Array产品元组=(GenericData.Array)

不幸的是,我不能测试它我没有一个简单的设置来这样做。我搜索了整个网络,但找不到一个方法。任何帮助都将不胜感激。

正确的方法是使用:

GenericData.Array<GenericRecord> productTuple =(GenericData.Array<GenericRecord>) record.get("products");
GenericData.Array productTuple=(GenericData.Array)record.get(“产品”);
我相信最后一个也可以,但这一个让我可以反序列化JSON,而不需要任何来自类的进一步干扰

GenericData.Array<GenericRecord> productTuple =(GenericData.Array<GenericRecord>) record.get("products");