Reflection PropertyInfo c未返回对象的成员#

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

我试图通过一个类使用PropertyInfo interate并从中创建一个datatable。但是,它不返回任何值。我有点困惑

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编译一个数组,其中包含关于类/类型的每个属性的信息。