如何将 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<>()
是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方法?
格式化:如何将1转为“01”、2转为“02”、3转为“03”等