2017-01-14 3 views
1

У меня есть несколько классов, которые отображаются ниже структуры/иерархии.json deserialization 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 я получаю строку JSON, как показано ниже

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

Однако при десериализации я получаю ошибку System.NullReferenceException как конструктор CustomData вызывается с CustomData быть нулевым.

Как я могу избежать «getter» для выполнения перед установщиком?

+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 Reference, выполните нулевую проверку конструктора.

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