我遇到了一种有趣的情况, flex v7默认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)

简而言之..
  • 是否可以注册自定义utf8json格式化程序(即类似于受支持的json.net转换器)?如果是这样,您能给我指出一个例子吗?
  • 或者,如果不可能的话,有没有办法让utf8json反序列化与上面的示例一起正常工作?
  • 最佳答案

    在 flex 讨论中回答(如上Russ所链接).. https://discuss.elastic.co/t/does-utf8json-used-in-elastic-v7-x-support-user-defined-custom-formatters/237283/4?u=forloop
    答案的简短摘要。

    简而言之,如果您想获得更快的utf8json序列化和自定义格式化程序的好处,那么您将需要使用utf8json库的非 flex 特定导入来实现自定义序列化程序。另外,如果这听起来很麻烦(/),并且/或者您对执行速度较慢的json.net(在NEST v6的默认序列化程序中使用)感到满意,则可以还原到此并使用自定义转换器。
    但是,向前看,事情似乎变得更加光明,因为v8 NEST可能会获得“新的”串行器,该串行器将(希望)支持自定义转换器/格式器。

    09-27 20:17