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

Class 使用自定义构造函数反序列化不可变类,class,constructor,json.net,immutability,json-deserialization,Class,Constructor,Json.net,Immutability,Json Deserialization,我有一个具有一些公共不可变属性(仅get;)的公共类。它还有一个自定义构造函数,该构造函数接受一个附加参数,该参数不是属性设置所需的,而是计算所需的。我认为,正因为如此,这个类无法通过Newtonsoft Json正确地反序列化。 其他仅具有与属性对应的输入参数的类可以正常工作 因此,这个类不能正确地反序列化自身,返回零。它有额外的参数“value”,它与任何属性都不相关,只用于计算和显示数据 public class DurationData { public Date

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

因此,这个类不能正确地反序列化自身,返回零。它有额外的参数“value”,它与任何属性都不相关,只用于计算和显示数据

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)而没有构造函数,那么它会正确地反序列化自身

公共类持续数据 { 公共日期时间开始{get;}

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

但是我不想创建额外的模拟类,并且希望使用original。如何正确地做到这一点

您是否能够通过添加Json.NET或数据协定属性来修改
DurationData
类?如果可以,请参阅。