弹性 v7.x 中使用的 utf8json 是否支持用户定义的自定义格式化程序?

Does utf8json used in elastic v7.x support user defined custom formatters?

我遇到了一个有趣的情况,elastic v7 default utf8json 设法序列化了我的对象,但无法正确反序列化它。

    public class MyClass : FlagsSet
      {
        [JsonIgnore]
        public bool IsActive
        {
          get
          {
            return this.IsSet("active");
          }
        }
    }

      public class FlagsSet : ICollection<string>, IEnumerable<string>, IEnumerable
      {
        private readonly HashSet<string> _list = new HashSet<string>((IEqualityComparer<string>) StringComparer.InvariantCultureIgnoreCase);
      ...
        public void Add(string item)
        {
          if (string.IsNullOrEmpty(item))
            return;
          this._list.Add(item);
        }
    }

如果我使用 json.net 我会通过编写一个转换器来处理这个问题,但是我看不到使用 utf8json 的等效项,因为默认序列化程序 (DefaultHighLevelSerializer) 使用的格式化程序似乎是都是内部注册的。我已经阅读了几页关于客户序列化程序的内容(尤其是这一页.. https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/custom-serialization.html

所以简而言之..

  1. 是否可以注册自定义 utf8json 格式化程序(即类似于支持的 json.net 转换器)?如果是这样,你能给我举个例子吗?
  2. 或者,如果不可能,那么有没有办法让 utf8json 反序列化在上面的例子中正常工作?

已在弹性讨论中回答(如上文 Russ 所链接)。https://discuss.elastic.co/t/does-utf8json-used-in-elastic-v7-x-support-user-defined-custom-formatters/237283/4?u=forloop

这里是答案的快速总结..

No it does not. Utf8Json used internally is a fork of Utf8Json and all the types are internal. It's used for serializing requests and responses, and also use to serialize documents too, by default. There is no way to register custom formatters for documents however. Some simple customisation is exposed through attributes e.g. StringEnumAttribute to serialize enums as strings, but nothing more complex. If custom serialization is required, I would recommend looking at JsonNetSerializer and custom converters for NEST 7.x and lower.

简而言之,如果您想要更快的 utf8json 序列化和自定义格式化程序的好处。那么您需要使用 utf8json 库的非弹性特定导入来实现自定义序列化程序。或者,如果这听起来工作量很大(!)AND/OR,您对性能较慢的 json.net(如 NEST v6 的默认序列化程序中所用)感到满意,那么您可以恢复到此并使用自定义转换器。

尽管向前看,事情看起来更光明,因为 v8 NEST 可能会得到一个 'new new' 序列化程序,它将(希望)支持自定义 converter/formatters..

For NEST 8.x, we are looking at System.Text.Json for serialization and would likely expose custom formatters/converters for this.