我的弹性搜索结果集中有一个对象; 我通过这个foreach迭代这个:
foreach (Nest.IHit<dynamic> temp in result.Hits) {
}
一个temp
它的来源看起来像这样(只需在visual studio中右击并点击&#34;复制值&#34;)
{{
"charSet": "UTF-8",
"executionTime": 927,
"parentUrl": "http://wfintranetdvlp.sidmar.be/sdg/",
"@timestamp": "2015-08-05T13:50:40.721Z",
"method": "GET",
"contentLength": 31575,
"mimeType": "text/html",
"text": "You are here: Home Productie Productie Productie Sidgal Sidgal 1 Campagneplan Dagverslag PamBrowser Sidgal 2 Campagneplan Dagverslag PamBrowser Sidgal 3 Campagneplan Dagverslag PamBrowser Alle Lijnen Stilstanden Productierapporten Autonoom Onderhoud JAP AO-zones Uitgevoerde AO-activiteit afgelopen jaar Kalender audits AO",
"title": "Productie",
"url": "http://wfintranetdvlp.sidmar.be/sdg/productie-2/",
"httpStatusCode": 200
}}
现在在我的代码中,我可以像temp.Source.title
或temp.Source.url
一样访问参数,但当我想访问@timestamp
时,它会返回null
关于如何访问时间戳的任何想法?
答案 0 :(得分:2)
我删除了原始答案,因为我在为您编写代码后发现了SO answer。
答案中的相关代码是:
static object GetDynamicMember(object obj, string memberName)
{
var binder = Binder.GetMember(CSharpBinderFlags.None, memberName, obj.GetType(),
new[] { CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) });
var callsite = CallSite<Func<CallSite, object, object>>.Create(binder);
return callsite.Target(callsite, obj);
}
它使用反射来构建调用以获取值,并且“@timestamp”可以很容易地作为字符串传递。
答案 1 :(得分:2)
C#标识符无法以@
开头。您实际上是在尝试访问timestamp
- @
被称为逐字说明符,它允许您将关键字用作标识符,例如您可以拥有一个名为@this
的本地,实际上是this
标识符。
唯一的方法是按名称访问变量,例如yourvar["@timestamp"]
。