在从master类调用的类中设置属性值

时间:2016-09-22 11:46:20

标签: c#

提前谢谢大家,这让我感到困惑!

在将它们转换为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。

我不知道为什么会这样,有没有人有任何想法?

3 个答案:

答案 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 ;}
    }
}