使用 Microsoft-Avro-Core 进行序列化时包括命名空间 属性

Including the namespace property when Serializing using Microsoft-Avro-Core

我正在使用 Microsoft-Avro-Core nuget 包将 C# 对象序列化为 avro 文件格式。我遇到的问题是 avro 模式在 json 模式定义中包含一个命名空间 属性,它不包含在序列化 avro 文件的模式中。

例如

{
  "name": "typeName",
  "type": [
    {
      "type": "record",
      "name": "recordName",
      "namespace": "topLevelRecord.record_data",
      "fields": [
      ]
    },
    "null"
  ]
}

序列化后,对于 avro,包含模式定义是在没有命名空间的情况下编写的,如下所示:

{
  "name": "typeName",
  "type": [
    {
      "type": "record",
      "name": "recordName",
      "fields": [
      ]
    },
    "null"
  ]
}

这给我们带来了一个问题,因为使用代码不再包含命名空间。我怎样才能告诉序列化器在序列化的 avro 文件中包含命名空间 属性。

设置 DataContract 属性的名称和命名空间属性不起作用。它只是在序列化名称 属性 前加上命名空间。这不是我们需要的。

我们正在使用 SequentialWriter 序列化记录集合。 AvroSerializationSettings 对象不包含 属性 来强制命名空间的序列化。

如有任何帮助,我们将不胜感激。

谢谢

所以经过一些研究,事实证明 RecordSchema 序列化程序不包含命名空间。查看 github 上的代码后,它使用 FullName 属性 作为名称并省略了命名空间。

Microsoft.Avro-Core

我们没有定义模式。但是我们必须使用它。为了符合要求,序列化模式必须包含命名空间。