【发布时间】:2018-10-10 23:03:47
【问题描述】:
我正在将 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; }
}
这允许用户像这样发送 JSON 请求正文,效果很好:
{
"Id": 123,
"Name": "Thing",
"ExtraProps": {
"Color": "red",
"Size": "large"
}
}
但是,如果我在 NEST 中使用它作为文档类型,那些额外的属性会以某种方式丢失它们的值,序列化为:
{
"Id": 123,
"Name": "Thing",
"ExtraProps": {
"Color": [],
"Size": []
}
}
将[Nest.Object] 属性添加到ExtraProps 并没有改变行为。据我了解,NEST 在内部使用 Json.NET,所以我不希望它对 Json.NET 类型有问题。有没有相对简单的解决方法?
以下是我正在权衡的一些选项:
使用custom serialization。我开始走这条路,感觉比它应该的要复杂得多,而且我从来没有让它发挥作用。
将
JObjects 映射到Dictionary<string, object>s。我已经验证了这项工作,但如果有嵌套对象(可能有),我需要通过递归来增强它。而且,理想情况下,我希望它与更通用的 JToken 类型一起使用。这是我倾向于的选项,但再次感觉它比应有的复杂。使用"Low Level" client 甚至是原始HTTP 调用。诚然,我还没有探索过这一点,但如果它真的比其他选择更简单/更干净,我愿意接受。
将此报告为错误。无论如何,我可能会这样做。我只是预感到这应该与
JObject或任何开箱即用的JToken一起工作,除非出于某种原因这是预期的行为。
【问题讨论】:
标签: c# elasticsearch json.net nest elasticsearch-net