首页 > 解决方案 > 无法让 Nest.PropertyName 考虑嵌套

问题描述

我有一种弹性条目,它由一些重叠的属性组成,比如

{
    "_source":
    {
        "pipeline_version":1.7,
        "agent":{
            "hostname":"SFPWEW11616",
            "id":"a1df2f4e-6dde-43fd-8af6-b3726124fdf7",
            "type":"winlogbeat",
            "ephemeral_id":"78be9770-dab9-4c56-a67e-b1a372a2f899",
            "version":"7.5.1"
        }
    }, [...]
}

我试图让我的 POCO 代表这个对象的扁平视图。根据我在文档中找到的内容,我尝试做类似的事情

Friend Class ElasticEventLogEntry
  <Nest.PropertyName("agent.hostname")>
  Public Property AgentHostName As String
  [...]
End Class

但无论我尝试什么,该值始终为空。我看过其他一些使用 NestedAttribute 属性的帖子,但据我所知,这仅在我们想在我们的 POCO 结构中创建嵌套对象时才有用,这不是我的情况。我错过了什么?

标签: elasticsearchnestelk

解决方案


做你想做的事情是不可能的,至少在没有为你的ElasticEventLogEntry类型编写自己的 JSON 序列化并连接到JsonNetSerializer.

更好的方法是进行ElasticEventLogEntry不同的建模

Public Class ElasticEventLogEntry
    <DataMember(Name:="pipeline_version")>
    Public Property PipelineVersion As String
    Public Property Agent As Agent
End Class

Public Class Agent
    Public Property Hostname As String
    Public Property Id As String
    Public Property Type As String
    <DataMember(Name:="ephemeral_id")>
    Public Property EphemeralId As String
    Public Property Version As String
End Class

然后代理主机名将被反序列化为.Agent.Hostname


推荐阅读