从具有反射的动态反序列化Json对象获取属性-.NET Core 3.1 C#
我目前正在学习如何进行反射,并且在获取严格类型类的属性和值方面取得了成功。但是,当我尝试使用从具有反射的动态反序列化Json对象获取属性-.NET Core 3.1 C#,c#,asp.net-core,reflection,C#,Asp.net Core,Reflection,我目前正在学习如何进行反射,并且在获取严格类型类的属性和值方面取得了成功。但是,当我尝试使用动态对象时,会出现一个异常: System.Reflection.TargetParameterCountException:参数计数不匹配 我在这里尝试了一些解决方案(例如,objectfoo=dynamic obj,然后使用obj),但似乎没有一个有效,因为它们不能完全反映我的问题 这是我的密码: dynamic evtPc1 = JsonConvert.DeserializeObject(json)
动态
对象时,会出现一个异常:
System.Reflection.TargetParameterCountException:参数计数不匹配
我在这里尝试了一些解决方案(例如,objectfoo=dynamic obj
,然后使用obj
),但似乎没有一个有效,因为它们不能完全反映我的问题
这是我的密码:
dynamic evtPc1 = JsonConvert.DeserializeObject(json);
PropertyInfo[] properties = evtPc1.GetType().GetProperties();
for (int i = 0; i < properties.Length; i++)
{
Console.WriteLine($"Property: {properties[i].GetValue(evtPc1)}");
}
dynamic evtPc1=JsonConvert.DeserializeObject(json);
PropertyInfo[]properties=evtPc1.GetType().GetProperties();
for(int i=0;i
如果您真的想要反序列化JSON的属性,您可以按照文档中所说的做,尽管您可能会对输出感到惊讶:
dynamic evtPc1 = JsonConvert.DeserializeObject(json);
PropertyInfo[] properties = evtPc1.GetType().GetProperties();
for (int i = 0; i < properties.Length; i++)
{
var prop = properties[i];
if (prop.GetIndexParameters().Length == 0)
Console.WriteLine("{0} ({1}): {2}", prop.Name,
prop.PropertyType.Name,
prop.GetValue(evtPc1));
else
Console.WriteLine("{0} ({1}): <Indexed>", prop.Name,
prop.PropertyType.Name);
}
dynamic evtPc1=JsonConvert.DeserializeObject(json);
PropertyInfo[]properties=evtPc1.GetType().GetProperties();
for(int i=0;i
但如果您只想从JSON本身获取属性,这就有点棘手了(但不确定这段代码是否是最优的)。注意,此代码不包括嵌套JSON对象的情况:
dynamic evtPc1 = JsonConvert.DeserializeObject(json);
PropertyInfo[] properties = evtPc1.GetType().GetProperties();
for (int i = 0; i < properties.Length; i++)
{
var prop = properties[i];
if (prop.Name == nameof(JToken.First) && prop.PropertyType.Name == nameof(JToken))
{
var token = (JToken) prop.GetValue(evtPc1);
while (token != null)
{
if (token is JProperty castProp)
Console.WriteLine($"Property: {castProp.Name}; Value: {castProp.Value}");
token = token.Next;
}
}
}
dynamic evtPc1=JsonConvert.DeserializeObject(json);
PropertyInfo[]properties=evtPc1.GetType().GetProperties();
for(int i=0;i
按照:“调用GetValue(对象)
重载以检索非索引属性的值;如果尝试检索索引属性的值,该方法将抛出TargetParameterCountException
异常。您可以通过调用GetIndexParameters
方法来确定属性是否索引。如果返回的参数的长度terInfo
数组为零,属性没有索引。“也许这会有所帮助:另外,我建议使用JsonSerializer而不是JSON.NET。请参见此处的新方法: