相关疑难解决方法(0)

如何在Elasticsearch NEST中序列化JToken或JObject类型的属性?

我正在将Elasticsearch引入C#API项目.我想利用现有的API模型作为搜索文档,其中许多模型允许添加自定义数据点.这些是使用Json.NET中的JObject类型实现的.例如:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public JObject ExtraProps { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这允许用户发送像这样的JSON请求体,效果很好:

{
   "Id": 123,
   "Name": "Thing",
   "ExtraProps": {
      "Color": "red",
      "Size": "large"
   }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我在NEST中将其用作文档类型,那些额外的属性会以某种方式丢失其值,序列化为:

{
   "Id": 123,
   "Name": "Thing",
   "ExtraProps": {
      "Color": [],
      "Size": []
   }
}
Run Code Online (Sandbox Code Playgroud)

添加[Nest.Object]属性ExtraProps不会改变行为.据我了解,NEST在内部使用Json.NET,所以我不希望它有Json.NET类型的问题.对此有一个相对简单的解决方案吗?

以下是我正在权衡的一些选项:

  1. 使用自定义序列化.我开始沿着这条路走下去,感觉比现在更加复杂,我从来没有让它发挥作用.

  2. 映射JObjectDictionary<string, object>s.我已经验证了这个工作,但是如果有嵌套对象(可能存在),我需要通过递归来增强它.而且,理想情况下,我希望使用更通用的JToken类型.这是我倾向于的选择,但同样,它感觉比它应该更复杂.

  3. 使用"低级"客户端甚至原始HTTP调用.诚然,我没有探索过这个,但如果它比替代品更简单/更清洁,我会对它持开放态度.

  4. 将此报告为错误.无论如何,我可能会这样做.我只是预感到应该使用 …

c# json.net elasticsearch nest elasticsearch-net

4
推荐指数
1
解决办法
1015
查看次数

标签 统计

c# ×1

elasticsearch ×1

elasticsearch-net ×1

json.net ×1

nest ×1