如何将 ISearchResponse <dynamic> 转换为 C# 类对象?

Posted

技术标签:

【中文标题】如何将 ISearchResponse <dynamic> 转换为 C# 类对象?【英文标题】:How to convert ISearchResponse <dynamic> to C# Class Object? 【发布时间】:2015-07-01 12:10:23 【问题描述】:

如何将ISearchResponse 转换为 C# 类对象。

我正在尝试转换为类对象,我的类名称将是动态的。

ISearchResponse<dynamic> bResponseNewLoop = 
    objElastic.Search<dynamic>(s => s
        .Index("index1")
        .Type("DOCTYPE")
        .From(0)
        .Size(10)
        .Source(sr => sr.Include(RequiredFields)));

从上面的 Response ,我想将响应对象转换为类对象和我从 xml 文件中检索的类名。

【问题讨论】:

【参考方案1】:

在较新的 NEST 版本中,我们引入了 IDocument,它允许您对正确的类型进行延迟反序列化。

var response = objElastic.Search<IDocument>(s => s
     .Index("index1")
     .Type("DOCTYPE")
     .From(0).Size(10)
     .Source(sr => sr.Include(RequiredFields)
);

现在在响应时,您可以遍历所有 .Hits 并检查命中元数据并使用它来反序列化为您想要的类型。例如

.Hits.First().Source.As<MyDocument>()

As&lt;&gt;()IDocument 上的一个方法

【讨论】:

感谢您的回复。 目前,我们使用的是 NEST 4.0。但是这个 IDocument 在 4.0 中不支持上述语法。请你建议哪个版本的 NEST 支持这个。 自版本 1.5.0 起,这已成为 NEST 的一部分 我刚进入第 6 版,但没有 IDocument。为了确保我与它存在的版本 1.5 进行了比较。 IDocument 在release notes 中被评论为“内击”的副作用;和“内部命中”是/是实验性的。 版本 7 有 ILazyDocument

以上是关于如何将 ISearchResponse <dynamic> 转换为 C# 类对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何将映射字符串到结构的字典传递给带有busctl的d-bus方法?

如何使用R将多列堆叠成一列[重复]

如何将已经转化二进制的MATLAB数组保存成文本格式

格式化:如何将1转为“01”、2转为“02”、3转为“03”等

格式化:如何将1转换为“01”,将2转换为“02”,将3转换为“03”,依此类推

Tomcat:如何将外部IP地址访问重定向到其他位置