0%

【C#】取得dynamic的屬性

解析Json格式時取得dynamic型別的物件,但如果裡面的物件不是用陣列的方式回傳,而是像這樣

我們不會知道.links底下究竟會link0、link1、link2….到幾,所以需要一個方法去try這個屬性是否存在

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private object GetDynamicMember(object obj, string memberName)
{
try
{
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);
}
catch (Exception ex)
{
return null;
}
}

透過這個方法,我們就可以試著將屬性丟進去看看有無回傳值了 ```csharp
int i = 0;
while (true)
{
dynamic trylink = GetDynamicMember(jsondata.links, “link” + i);
if (trylink != null)
{
_urlclickcount += Convert.ToInt32(trylink.clicks);
i++;
}
else
break;
}