如何处理在参数化构造函数上执行反序列化时引发 json.net 异常



我正在使用 Json.net 4.5。我已经使用 JSON 序列化了 PatientV1,并尝试对 PatientV2 进行消毒。序列化发生得很好。

但是当我在AppUtility.CreatePatientNr中引入验证检查时(如果传递任何空值或空值,则会引发异常),反序列化失败。

我尝试使用派生的 JsonConverter 来创建 PatientV2 对象,我可以控制将"正确"值传递给构造函数,但是在创建对象后我将无法设置正确的 PatientNr,因为它是只读的。

我不想使用反射。Json.net 是否提供了在 JsonConverter 中设置只读属性patientV2.PatientNr的方法?

有没有办法忽略此异常或任何其他方法来创建 PatientV2 对象?

    //version 1.0. Legacy code with no Json tag
    public class PatientV1
    {
        public int PatId { get; set; }
    }
    //Version 2.0
    public class PatientV2
    {
        public PatientV2( string Id, string s1, string s2 )
        {
            PatientNr = AppUtility.CreatePatientNr( Id, s1, s2);
        }
        //PatId is renamed to a string type. It now has private set
        [JsonProperty( "PatId" )]
        public string PatientNr { get; private set; }
    }

编辑1:Json是否有任何特定的反序列化构造函数,就像二进制序列化一样?

Json 首先使用默认构造函数尝试对象,如果找不到,则采用第一个参数化构造函数并将 null 数据传递给它。Json 没有像二进制序列化一样用于构造对象的特定构造函数。

但是,如果您有实现 ISerializable 的对象,则调用序列化构造函数。

可以使用的方法如下

  1. 在 JsonConverter 中,通过将适当的值传递给参数化构造函数
  2. 从构造函数中删除可能引发例外。
  3. 使所有持久可作为简单的结构,没有任何业务逻辑(贫血模型)

我目前将使用方法 1) 然后 2) 稍后 3)。由于遗留的巨大代码原因方法2)和3)将需要一些时间

相关内容

  • 没有找到相关文章

最新更新