在架构中包含数组时,将Avro GenericRecord与Confluent.Apache.Avro C#结合使用

时间:2019-11-29 15:45:50

标签: c# avro confluent-kafka

我具有以下包含avro数组类型的架构。

{
  "type" : "record",
  "name" : "PersonalizationCustomerState_Payload",
  "namespace" : "com.aaa.qdh.personalization",
  "fields" : [ {
    "name" : "consumer_id",
    "type" : "string"
  }, {
    "name" : "variables",
    "type" : {
      "type" : "array",
      "items" : {
        "type" : "record",
        "name" : "KeyValue",
        "fields" : [ {
          "name" : "name",
          "type" : "string"
        }, {
          "name" : "value",
          "type" : [ "null", "string" ],
          "default" : null
        } ]
      }
    }
  } ]
}

我想使用通用记录来发布使用此架构的事件。但是我没有找到一种方法,可以使用通用记录通过融合的.net库注入数组数据。我发现了如何在Java populating nested records with array in Avro using a GenericRecord中做到这一点,但是.net版本的Avro似乎没有类似的功能。

下面是我到目前为止的代码。问题在于变量字段使用数组模式,因此它从 new GenericRecord((RecordSchema)variables.Schema); 行引发了异常。而且GenericRecord需要一个RecordSchema。

                    var schema = (RecordSchema)Avro.Schema.Parse(
                        File.ReadAllText("asvc/PersonalizationCustomerState_Payload.avsc"));
                    var record = new GenericRecord(schema);
                    record.Add("consumer_id", "10");

                    ((RecordSchema)schema).TryGetField("variables", out Field variables);
                    var array = new GenericRecord((RecordSchema)variables.Schema);
                    // how to add to an array? 


                    record.Add("variables", array);

能否请您解释一下该怎么做?

0 个答案:

没有答案