我正在尝试浏览dynamic
中包含的JArray
对象的每个属性:
Newtonsoft.Json.Linq.JArray feeds = Newtonsoft.Json.Linq.JArray.Parse(response.Content);
if (feeds.Any())
{
PropertyDescriptorCollection dynamicProperties = TypeDescriptor.GetProperties(feeds.First());
foreach (dynamic feed in feeds)
{
object[] args = new object[dynamicProperties.Count];
int i = 0;
foreach (PropertyDescriptor prop in dynamicProperties)
{
args[i++] = feed.GetType().GetProperty(prop.Name).GetValue(feed, null);
}
yield return (T)Activator.CreateInstance(typeof(T), args);
}
}
当我试图访问feed.GetType().GetProperty(prop.Name).GetValue(feed, null);
时,它告诉我feed.GetType().GetProperty(prop.Name);
为空。
JSON结构如下所示:
[
{
"digitalInput.field.channel":"tv",
"digitalInput.field.comment":"archive",
"count(digitalInput.field.comment)":130
}
]
有人可以帮助我吗?
答案 0 :(得分:2)
尝试将您的foreach更改为
foreach (PropertyDescriptor prop in dynamicProperties)
{
args[i++] = prop.GetValue(feed);
}
<强>更新强>
args[i++] = feed.GetType().GetProperty(prop.Name).GetValue(feed, null);
所以,让我们一步一步地看到它:
feed.GetType()
:将返回JArray
feed.GetType().GetProperty(prop.Name)
:问题出在这里,因为
你试图通过名字来获得类型JArray
的属性,但是
在您的情况下,prop.Name
将是“digitalInput.field.channel”,“digitalInput.field.comment”和“count(digitalInput.field。评论)“ null
,因为类型JArray
没有此类属性。