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,它只遵循预期的确切大小写。