2017-01-14 11 views
1

私は、下の構造/階層にマップするいくつかのクラスを持っています。jsonの逆シリアル化GETが前に呼び出されます。Set

public class CustomModel 
{ 
    public string Message { get; set; } 

    public int Code { get; set; } 

    public CustomData Info { get; set; } 
} 

public class CustomData  
{ 

    public CustomData (CustomObject customData) 
    { 
     CustomObjectProp = customData.customMessage 
    } 
} 

public class CustomObject 
{ 
    public string CustomObjectProp {get; set;} 
} 

のCustomModelをシリアル化するとき、私はデシリアライズするときCustomDataのコンストラクタがcustomDataがnullであることで呼び出されますよう

{ 
  "Message ": "A message is set.", 
  "Code": 825, 
  "Info": "Some Info is set" 
} 

以下のようなJSON文字列は、しかし、私はSystem.NullReferenceExceptionエラーを取得し得ます。

セッターの前に「ゲッタ」を実行しないようにするにはどうすればよいですか?

+0

[Json.net](https://www.nuget.org/packages/newtonsoft.json)を使用してjsonを逆シリアル化していますか? –

+0

@BrandonMinnick - はい、json.netを使用しています – Noah

+0

デフォルトコンストラクタを追加してデフォルトデータを設定することをお勧めします。それ以外の場合は、パラメータ化されたコンストラクタを処理するために顧客のコンバーターを書くことができます:http://stackoverflow.com/questions/8254503/how-to-pass-arguments-to-a-non-default-constructor/8312048#8312048 – gideon

答えて

0

Null参照例外を回避するには、コンストラクターでNullチェックを実行します。

public class CustomData  
{  
    public CustomData (CustomObject customData) 
    { 
     if(customData != null) 
      CustomObjectProp = customData.customMessage 
    } 
} 

あなたがC#6を使用している場合、あなたは、インラインヌルチェックを実行するNull Conditioner Operatorを活用することができます。

public class CustomData  
{ 
    public CustomData (CustomObject customData) 
    { 
     CustomObjectProp = customData?.customMessage 
    } 
} 
関連する問題