C#动态对象具有带有at符号的属性
我的elasticsearch结果集中有一个对象; 我通过这个foreach迭代了这一点:C#动态对象具有带有at符号的属性,c#,C#,我的elasticsearch结果集中有一个对象; 我通过这个foreach迭代了这一点: foreach (Nest.IHit<dynamic> temp in result.Hits) { } 现在,在我的代码中,我可以访问如下参数temp.Source.title或temp.Source.url,但当我想访问@timestamp时,它返回null 知道如何访问时间戳吗?我删除了我的原始答案,因为我是在为您尝试代码后发现的 答案中的相关代码如下: static object
foreach (Nest.IHit<dynamic> temp in result.Hits) {
}
现在,在我的代码中,我可以访问如下参数temp.Source.title
或temp.Source.url
,但当我想访问@timestamp
时,它返回null
知道如何访问时间戳吗?我删除了我的原始答案,因为我是在为您尝试代码后发现的 答案中的相关代码如下:
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);
}
静态对象GetDynamicMember(对象obj,字符串memberName)
{
var binder=binder.GetMember(CSharpBinderFlags.None,memberName,obj.GetType(),
新[]{CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None,null)};
var callsite=callsite.Create(活页夹);
返回callsite.Target(callsite,obj);
}
它使用反射来建立调用以获取值,并且“@timestamp”可以很容易地作为字符串传入。我删除了我的原始答案,因为我在为您尝试代码中的某些内容后发现了这一点 答案中的相关代码如下:
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);
}
静态对象GetDynamicMember(对象obj,字符串memberName)
{
var binder=binder.GetMember(CSharpBinderFlags.None,memberName,obj.GetType(),
新[]{CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None,null)};
var callsite=callsite.Create(活页夹);
返回callsite.Target(callsite,obj);
}
它使用反射来建立调用以获取值,并且“@timestamp”可以很容易地作为字符串传入。C#标识符不能以@
开头。实际上,您正在尝试访问时间戳
-@
被称为逐字说明符,它允许您使用关键字作为标识符,例如,您可以有一个名为@this
的本地标识符,它实际上就是this
标识符
唯一的方法是按名称访问变量,类似于yourvar[“@timestamp”]
C;标识符不能以@
开头。实际上,您正在尝试访问时间戳
-@
被称为逐字说明符,它允许您使用关键字作为标识符,例如,您可以有一个名为@this
的本地标识符,它实际上就是this
标识符
唯一的方法是按名称访问变量,类似于
yourvar[“@timestamp”]
我以为这是一个json请添加显示如何访问这些属性的代码这不是json,@MichalDymel刚刚添加了:)我以为这是一个json请添加显示如何访问这些属性的代码这不是json,@MichalDymel刚刚添加了:)