我具有以下包含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);
能否请您解释一下该怎么做?