提前谢谢大家,这让我感到困惑!
在将它们转换为JSON之前,我有两个类来存储值,但是我没有那么远,因为我无法将值加载到它们中。
public class MergeFieldsReload
{
public string FNAME { get; set; }
public string LNAME { get; set; }
public string CUSTOMERID { get; set; }
public string DOB { get; set; }
public string CLINICCODE { get; set; }
}
public class DataReload
{
public string email_address { get; set; }
public string status { get; set; }
public MergeFieldsReload merge_fields { get; set; }
}
正如您所看到的,从DataReload调用MergeFieldsReload,以便JSON.Net将其视为子数组(可能在那里有错误的名称,请随时纠正我)。
但是,当尝试在MergeFieldsReload中设置任何字段的值时,如此
DataReload data = new DataReload();
data.merge_fields.FNAME = row["FNAME"].ToString();
我得到一个System.NullReferenceException:对象引用未设置为对象的实例。'错误。对于直接在DataReload中的两个字段,我没有收到此错误,只有MergeFieldsReload。
我不知道为什么会这样,有没有人有任何想法?
答案 0 :(得分:0)
您必须在分配其属性(第二行)之前实例化merge_fields:
DataReload data = new DataReload();
data.merge_fields = new MergeFieldsReload();
data.merge_fields.FNAME = row["FNAME"].ToString();
您也可以在DataReload的构造函数中执行此操作。
答案 1 :(得分:0)
您面临的问题是类是参考值,这意味着它应该被构造。您可以通过定义构造函数来解决此问题。
public class MergeFieldsReload
{
public string FNAME { get; set; }
public string LNAME { get; set; }
public string CUSTOMERID { get; set; }
public string DOB { get; set; }
public string CLINICCODE { get; set; }
}
public class DataReload
{
public DataReload()
{
merge_fields = new MergeFieldsReload();
}
public string email_address { get; set; }
public string status { get; set; }
public MergeFieldsReload merge_fields { get; set; }
}
在C#6.0中,你也可以这样做:
public class MergeFieldsReload
{
public string FNAME { get; set; }
public string LNAME { get; set; }
public string CUSTOMERID { get; set; }
public string DOB { get; set; }
public string CLINICCODE { get; set; }
}
public class DataReload
{
public string email_address { get; set; }
public string status { get; set; }
public MergeFieldsReload merge_fields { get; set; } = new MergeFieldsReload();
}
答案 2 :(得分:0)
您需要在DataReload类中创建MergeFieldsReload类的实例
public class DataReload
{
public string email_address { get; set; }
public string status { get; set; }
private MergeFieldsReload _merge_fields = new MergeFieldsReload();
public MergeFieldsReload Merge_Fields
{
get { return _merge_fields ; }
set { _merge_fields = value ;}
}
}