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

5

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

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

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

从上面的响应中,我想将响应对象转换为类对象,并且我从xml文件中检索类名。
1个回答

7
在较新的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上的一个方法。


谢谢您的回复。 - Veena Reddy
1
目前,我们正在使用NEST 4.0。但是在4.0中,此IDocument不支持上述语法。请问您能否建议哪个版本的NEST支持此功能。 - Veena Reddy
自从版本1.5.0以来,这已经成为NEST的一部分。 - Martijn Laarman
我刚开始使用第6版,但没有发现IDocument。为了确保,我将其与存在于版本1.5中的进行了比较。据发布说明中的描述,IDocument被作为“inner hits”的附带效果而注释掉了;而“inner hits”是一个实验性功能,可能已经过时了。 - LosManos
版本7具有ILazyDocument。 - CornelC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接