Elastic NEST反序列化错误的字段
Elastic NEST De-serializing the wrong field
使用 ElasticSearch.Net v6.0.2
给定索引项
{
"PurchaseFrequency": 76,
"purchaseFrequency": 80
}
和 POCO 对象
public class Product
{
public int PurchaseFrequency { get; set; }
}
和设置
this.DefaultFieldNameInferrer(x => x);
Nest 返回 PurchaseFrequency = 80,即使这是错误的字段。
如何让 NEST 从 ElasticSearch 中提取正确的大小写字段?
我不认为这 容易 可能,因为 this behaviour is defined in Json.NET,NEST 在内部使用(不是 6.x 的直接依赖,它被 IL 合并到程序集中)。
例如,
JsonConvert.DeserializeAnonymousType("{\"a\":1, \"A\":2}", new { a = 0 })
将匿名类型 属性 a
值反序列化为 2
。但是
JsonConvert.DeserializeAnonymousType("{\"A\":2, \"a\":1}", new { a = 0 })
将匿名类型 属性 a
值反序列化为 1
即属性在返回的 JSON 中出现的顺序与分配的最终值有关到类型实例上的 属性。
如果可以,请避免使用仅大小写不同的 JSON 属性 名称。如果你不能,那么你需要 hook up the JsonNetSerializer in the NEST.JsonSerializer nuget package 并为你的类型写一个自定义的 JsonConverter
,它只遵循预期的确切大小写。
使用 ElasticSearch.Net v6.0.2
给定索引项
{
"PurchaseFrequency": 76,
"purchaseFrequency": 80
}
和 POCO 对象
public class Product
{
public int PurchaseFrequency { get; set; }
}
和设置
this.DefaultFieldNameInferrer(x => x);
Nest 返回 PurchaseFrequency = 80,即使这是错误的字段。
如何让 NEST 从 ElasticSearch 中提取正确的大小写字段?
我不认为这 容易 可能,因为 this behaviour is defined in Json.NET,NEST 在内部使用(不是 6.x 的直接依赖,它被 IL 合并到程序集中)。
例如,
JsonConvert.DeserializeAnonymousType("{\"a\":1, \"A\":2}", new { a = 0 })
将匿名类型 属性 a
值反序列化为 2
。但是
JsonConvert.DeserializeAnonymousType("{\"A\":2, \"a\":1}", new { a = 0 })
将匿名类型 属性 a
值反序列化为 1
即属性在返回的 JSON 中出现的顺序与分配的最终值有关到类型实例上的 属性。
如果可以,请避免使用仅大小写不同的 JSON 属性 名称。如果你不能,那么你需要 hook up the JsonNetSerializer in the NEST.JsonSerializer nuget package 并为你的类型写一个自定义的 JsonConverter
,它只遵循预期的确切大小写。