2016-09-22 30 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 ;} 
    } 
}