我遇到了一种有趣的情况, 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)
简而言之..
最佳答案
在 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可能会获得“新的”串行器,该串行器将(希望)支持自定义转换器/格式器。