使用自定义构造函数反序列化不可变类

时间:2019-11-18 06:21:52

标签: class constructor json.net immutability json-deserialization

我有一个带有一些公共不可变属性的公共类(仅get;)。它还具有一个自定义构造函数,该构造函数带有一个附加参数,设置属性不是必需的,而是仅用于计算。我认为,因此,该类无法通过Newtonsoft Json正确地反序列化。 其他仅具有属性输入参数的类可以正常工作。

因此,此类无法正确地反序列化自身,返回零。它具有附加的参数“值”,该参数与任何属性均不相关,仅用于计算和显示数据。

public class DurationData
    {
        public DateTime Start { get; }

        public int Index { get; }

        public double ActivityDurationInHours { get; }

        public string Activetime { get; }

        public ShiftDurationData(DateTime start, int index, TimeSpan value )
        {
            Start = start;
            Index = shiftIndex;                 
            ActivityDurationInHours = Math.Round(value.TotalHours, 1);
            Activetime = $"{(int)value.TotalHours:d2}:{value.Minutes:D2}:{value.Seconds:D2}";
        }        
    }

如果我像下面这样设置模拟或仅使用可变属性(get; set)并且没有构造函数,它将正确地反序列化自己。

公共类DurationData         {             公开的DateTime开始{ }

        public int Index { get; }

        public double ActivityDurationInHours { get; }

        public string Activetime { get; }

        public ShiftDurationData(DateTime start, int index, double activityDurationInHours, string activeTime)
        {
            Start = start;
            Index = shiftIndex;                 
            ActivityDurationInHours = activityDurationInHours
            ActiveTime = activetime ?? throw new ArgumentNullException(nameof(activeTime))
        }        
    }

但是我不想创建其他模拟类,并且希望使用原始类。如何正确执行

0 个答案:

没有答案