NEST:如何处理包含单个值的数组字段(Newtonsoft Json序列化错误)

时间:2013-05-21 11:54:37

标签: elasticsearch nest

在与NEST一起评估ElasticSearch期间,我遇到了一个新问题。 问题是关于数组类型的字段以及ES中自动支持数组类型的事实。我有一个字段ProductIds,可以包含1或n个值。映射定义如下:

[…]
    "ProductIds" : {
        "type" : " integer",
        "store" : "yes"
    },
[…]

如果该字段包含几个ID,则ES中的查询结果如下所示:

ProductIds: [
    1,
    2
]

数组类型是自动的,如果它只包含一个值,则字段如下所示:

    ProductIds: 1

这种情况会导致以下问题: 我有一个Nest-query,它映射到某个类。在这个类中,属性ProductIds被定义为List<int>(我也尝试使用整数数组)。只要存在多个值,这就完美无缺。如果该字段在ES中仅包含单个值,则将其另存为基本数据类型。这导致Newtonsoft.JSON错误:

  

连接错误。 at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader,Object value,CultureInfo culture,JsonContract contract,Type targetType)

     

at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader,Type objectType,JsonContract contract,JsonProperty member,JsonContainerContract containerContract,JsonProperty containerMember,Object existingValue)

     

at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty属性,JsonConverter propertyConverter,JsonContainerContract containerContract,JsonProperty containerProperty,JsonReader reader,Object target)   

那么有什么建议如何解决这个问题? TIA

1 个答案:

答案 0 :(得分:4)

您不是第一个遇到此问题的解决方案: https://github.com/Mpdreamz/NEST/issues/227#issuecomment-16550076

计划在NEST开箱即用。