and*_*ndy 1 avro confluent-schema-registry
在 C# 中,我可以定义这两个 POCO 来定义代
public class Family
{
public List<Person> FamilyMembers {get; set;}
}
public class Person
{
public string FirstName {get; set;}
public string LastName {get; set;}
public List<Person> Children {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试定义一个 AVRO 架构来序列化 FamilyMembers。是否可以在 Avro 中定义一个递归数组(不确定这是否是正确的术语),而不必像下面这样在模式中指定每一代。
{
"type": "record",
"name": "family",
"namespace": "com.family.my",
"fields": [
{
"name":"familymember",
"type":{
"type": "array",
"items":{
"name":"person",
"type":"record",
"fields":[
{"name":"firstname", "type":"string"},
{"name":"lastname", "type":"string"},
{"name":"children",
"type":{
"type": "array",
"items":{
"name":"children",
"type":"record",
"fields":[
{"name":"firstname", "type":"string"},
{"name":"lastname", "type":"string"},
{"name":"grandchildren",
"type":{
"type": "array",
"items":{
"name":"greatgrandchildren",
"type":"record",
"fields":[
{"name":"firstname", "type":"string"},
{"name":"lastname", "type":"string"}
]
}
}}
]
}
}}
]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
是的!定义后person,您可以将其用作数组中的项目类型children。例如:
{
"type": "record",
"name": "family",
"namespace": "com.family.my",
"fields": [
{
"name": "familymember",
"type": {
"type": "array",
"items": {
"name": "person",
"type": "record",
"fields": [
{
"name": "firstname",
"type": "string"
},
{
"name": "lastname",
"type": "string"
},
{
"name": "children",
"type": {
"type": "array",
"items": "person"
}
}
]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
Avro 规范LongList演示了这种递归模式:
{
"type": "record",
"name": "LongList",
"aliases": ["LinkedLongs"],
"fields" : [
{"name": "value", "type": "long"},
{"name": "next", "type": ["null", "LongList"]}
]
}
Run Code Online (Sandbox Code Playgroud)