2016-09-22 44 views
0

谢谢大家提前,这是混淆了我的地狱!设置从主类调用的类中的属性值

我有以下两个类来存储值之前将其转换为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; } 
} 

正如你可以看到MergeFieldsReload从DataReload叫,为了JSON.Net看到它作为一个子阵列(可能有错误的名字在那里,随时纠正我)。

但是尝试设置任何字段的值在MergeFieldsReload像这样

DataReload data = new DataReload(); 

data.merge_fields.FNAME = row["FNAME"].ToString(); 

当我得到一个“System.NullReferenceException:对象不设置到对象的实例。”错误。对于直接位于DataReload中的两个字段,只有MergeFieldsReload没有出现此错误。

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

回答

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(); 
} 
+0

绝对完美!非常感谢你,我实际上已经把自己放在了最前面(我意识到我需要采取一些措施来启动merge_fields),但不知道如何去做。 – Thrasymakus

0

你必须指定其属性(第二行)之前实例merge_fields:

DataReload data = new DataReload(); 
data.merge_fields = new MergeFieldsReload(); 
data.merge_fields.FNAME = row["FNAME"].ToString(); 

你也可以做,在DataReload的构造。

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