Reflection PropertyInfo c未返回对象的成员#
我试图通过一个类使用PropertyInfo interate并从中创建一个datatable。但是,它不返回任何值。我有点困惑Reflection PropertyInfo c未返回对象的成员#,reflection,c#-4.0,propertyinfo,Reflection,C# 4.0,Propertyinfo,我试图通过一个类使用PropertyInfo interate并从中创建一个datatable。但是,它不返回任何值。我有点困惑 public class thetransactions { public string FirstName; public string Surname; public string PreviousOwner; public string NewOwner; public string postcode; publi
public class thetransactions
{
public string FirstName;
public string Surname;
public string PreviousOwner;
public string NewOwner;
public string postcode;
public string[] FileName;
}
然后用这个代码做腿部工作
theTransactions[] thetransactions = new theTransactions[10];
thetransactions[0] = JsonConvert.DeserializeObject<theTransactions>(mydatastring);
PropertyInfo[] properties = thetransactions.GetType().GetElementType().GetProperties();
DataTable sampletable = new DataTable();
DataColumn dc = null;
foreach (PropertyInfo pi in properties)
{
dc = new DataColumn();
dc.ColumnName = pi.Name;
dc.DataType = pi.PropertyType;
sampletable.Columns.Add(dc);
}
theTransactions[]theTransactions=新的transactions[10];
事务[0]=JsonConvert.DeserializeObject(mydatastring);
PropertyInfo[]properties=thetransactions.GetType().GetElementType().GetProperties();
DataTable sampletable=新DataTable();
DataColumn dc=null;
foreach(PropertyInfo pi in properties)
{
dc=新数据列();
dc.ColumnName=pi.Name;
dc.DataType=pi.PropertyType;
sampletable.Columns.Add(dc);
}
问题在于您在Transactions
类中定义的是正态变量,而不是属性:
public class thetransactions
{
public string FirstName{get;set;}
public string Surname{get;set;}
public string PreviousOwner{get;set;}
public string NewOwner{get;set;}
public string postcode{get;set;}
public string[] FileName{get;set;}
}
当我更改为查看[0]时,会出现NullReferenceException,这很奇怪,因为存在对象。我唯一的预感可能是我的一些属性为null,例如NewOwner附加了null值。虽然我对值不是特别感兴趣,但我只想获取列名和类型;现在应该可以解决你的问题了。我的答案的第一个版本包含了错误的暗示;对不起,太棒了!我假定PropertyInfo为每种类型调用get方法。
PropertyInfo
只存储属性的所有信息,例如属性名称(FirstName
)和类型(System.String
)GetProperties()
使用反射API编译一个数组,其中包含关于类/类型的每个属性的信息。