【问题标题】:json deserialization GET, gets called before Setjson反序列化GET,在Set之前被调用
【发布时间】:2017-01-14 15:22:16
【问题描述】:

我有几个类映射到下面的结构/层次结构。

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 为空。

如何避免在 setter 之前执行“getter”?

【问题讨论】:

  • 你是在使用Json.net反序列化json吗?
  • @BrandonMinnick - 是的,我正在使用 json.net
  • 我建议也添加一个默认构造函数并设置一些默认数据。除此之外,您可以考虑编写一个客户转换器来处理参数化构造函数:stackoverflow.com/questions/8254503/…
  • 这还能编译吗?您的类型层次结构不符合指定的 json。
  • 嗨诺亚!让我知道我的回答是否有助于解决您的问题!如果是这样,让我们​​将其标记为已回答,以帮助可能有相同问题的未来开发者!

标签: c# json json.net


【解决方案1】:

为避免空引用异常,请在构造函数中执行空检查。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多