我在使用C#反射时遇到问题。
我要反映的对象如下:
public partial class ApplicationUser : IdentityUser
{
public ApplicationUser()
{
}
public decimal CustomerId { get; set; }
public string AlexaAccessToken { get; set; }
public string GoogleHomeAccessToken { get; set; }
}
我用来反映的代码如下:
Dictionary<string,string> GetReplacement(ApplicationUser applicationUser)
{
Dictionary<string, string> toRet = new Dictionary<string, string>();
PropertyInfo[] propertyInfos;
propertyInfos = typeof(ApplicationUser).GetProperties(BindingFlags.Public);
Array.Sort(propertyInfos,
delegate (PropertyInfo propertyInfo1, PropertyInfo propertyInfo2)
{ return propertyInfo1.Name.CompareTo(propertyInfo2.Name); });
foreach (PropertyInfo propertyInfo in propertyInfos)
{
toRet.Add(propertyInfo.Name,propertyInfo.GetValue(applicationUser).ToString());
}
return toRet;
}
问题在于字典总是空的,因为propertyinfo总是空的。
问题是什么?
谢谢大家。
最佳答案
这里有两个问题:
通过BindingFlags.Public | BindingFlags.Instance
绑定
检查空值:propertyInfo.GetValue(applicationUser)?.ToString()
或Convert.ToString(propertyInfo.GetValue(applicationUser))
关于c# - C#:propertyinfo始终为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57956167/