elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

C# 弹性/嵌套不会处理空值

C# 弹性/嵌套不会处理空值,c#,elasticsearch,nest,C#,elasticsearch,Nest,我目前仅限于NEST v2.4.6 我有一些具有属性的对象,这些属性有时可能为null,并且必须使用这些null属性进行持久化 根据文件: 这应该允许我序列化空值。 不幸的是,一旦设置了它,我所有的ElasticDB查询就开始什么都不返回了 这就像我把 [JsonProperty(NullValueHandling = NullValueHandling.Include)] 属性,它工作得很好 然而,我显然希望在全球范围内实现这一点 这就是我的实现的样子: var pool = ne

我目前仅限于NEST v2.4.6

我有一些具有属性的对象,这些属性有时可能为null,并且必须使用这些null属性进行持久化

根据文件:

这应该允许我序列化空值。 不幸的是,一旦设置了它,我所有的ElasticDB查询就开始什么都不返回了

这就像我把

[JsonProperty(NullValueHandling = NullValueHandling.Include)]
属性,它工作得很好

然而,我显然希望在全球范围内实现这一点

这就是我的实现的样子:

    var pool = new SingleNodeConnectionPool(new Uri(ConfigurationManager.AppSettings["ElasticInstanceAddress"]));
    var connection = new HttpConnection();
    var settings = new ConnectionSettings(pool, connection,
        new SerializerFactory((s, values) =>
    {
        s.NullValueHandling = NullValueHandling.Include;
    }));
在序列化程序上启用
NullValueHandling
后突然开始不返回任何内容的嵌套查询示例如下:

var dog = _client.Get<Dog>(query.DogName).Source;
var dog=\u client.Get(query.DogName).Source;

有什么想法吗?

为什么要用空值保存对象?无论是否保留,当从
\u source
反序列化回时,该值应为
null
,因为该字段缺失或实际设置为
null
。在任何情况下,它都应该在默认情况下工作。可以使用现有查询检查查询中的null,请参阅:

依赖于对象上的null的遗留代码。我不需要检查空值。我需要能够序列化和反序列化空值。如OP中所述,在JSON序列化程序上设置NullValueHandling.Include选项仅在用作属性而不是通常的全局方式时有效。如果我不能在设置到位的情况下首先反序列化任何内容,我认为exists查询在这里是不相关的。@Kyanite
\u source
上的
null
值将反序列化为类型上的
null
属性,除非您在反序列化中有特殊处理。最终结果是,当反序列化到CLR类型的实例中时,属性的
\u source
上的
null
\u source
上的任何属性都是相同的。您是否需要出于其他原因区分这些值?@Kyanite NEST默认情况下序列化和反序列化
null
值。您正在通过Id获取文档,该Id传入了
query.DogName
,这听起来不太正确。@Kyanite OP中不清楚什么有效,什么无效。