2016-09-22 3 views
0

ありがとうございました。これは私の心を混乱させています!マスタークラスから呼び出されたクラスのプロパティ値を設定する

私は値をJSONに変換する前に値を格納するために以下の2つのクラスを持っていますが、値をロードすることができないので、これまでに値を取得していません。

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

あなたはJSON.Netは、サブアレイ(私を修正すること自由に感じ、そこに間違った名前を有していてもよい)としてそれを見るようにするために、MergeFieldsReloadがDataReloadから呼び出された見ることができるように。

ので

DataReload data = new DataReload(); 

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

ようMergeFieldsReloadの任意のフィールドの値を設定しようとしたときしかし、私が手に「System.NullReferenceException:オブジェクト参照オブジェクトのインスタンスに設定されていない」をエラー。私は、DataReloadに直接存在する2つのフィールドのMergeFieldsReloadだけでこのエラーを取得しません。

私はこれがなぜそうなるのか分かりません。だれかにアイデアがありますか?

答えて

0

あなたが直面している問題は、クラスが参照値であることです。つまり、クラスを構築する必要があるということです。これを解決するには、コンストラクタを定義します。 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 DataReload() 
    { 
     merge_fields = new MergeFieldsReload(); 
    } 

    public string email_address { get; set; } 
    public string status { get; set; } 
    public MergeFieldsReload merge_fields { get; set; } 
} 

あなたも行うことができます。

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

としてDataReloadクラスでMergeFieldsReloadクラスのインスタンスを作成する必要があります!ありがとう、私は実際に自分自身のほとんどの方法を持っていた(私はmerge_fieldsを開始するために何かをする必要があることに気づいた)しかし、そうする方法を知らなかった。 – Thrasymakus

0

あなたはその性質(第2ライン)を割り当てる前にmerge_fieldsをインスタンス化する必要があります。

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

ます。またDataReloadのコンストラクタでそれを行うことができます。

0

あなたは絶対に完璧な

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 ;} 
    } 
} 
関連する問題