I have the following classes:
public class ScheduledTask
{
public Frequency Frequency { get; set; }
public DateTime LastRun { get; set; }
public string Status { get; set; }
}
Frequency class:
[BsonDiscriminator(RootClass = true)]
[BsonKnownTypes(typeof(Once), typeof(Daily))]
public class Frequency
{
public Frequency(TimeSpan hour)
{
Hour = hour;
}
public TimeSpan Hour { get; set; }
}
public class Once : Frequency
{
public Once(TimeSpan time, DateTime date) : base(time)
{
Date = Date;
}
public DateTime Date { get; set; }
}
public class Daily : Frequency
{
public Daily(TimeSpan time) : base(time)
{
}
}
I'm sending this json to my WebApi:
{
"Frequency": {
"$type": "setupsaver_api.Models.TeamManagement.Once, setupsaver-api",
"Date": "2021-01-01T00:00:00Z",
"Hour": "07:00:00"
},
"LastRun": "2021-01-01T00:00:00Z",
"Status": null
}
API:
[HttpPost]
[Route("SaveTask")]
public IHttpActionResult SaveTask([FromBody] JObject task)
{
ScheduledTask scheduledTask = ConvertJobjectToScheduledTask(task);
return Ok();
}
private static ScheduledTask ConvertJobjectToScheduledTask(JObject task)
{
var scheduledTask = JsonConvert.DeserializeObject<ScheduledTask>(task.ToString(), new JsonSerializerSettings
{
DateFormatHandling = DateFormatHandling.IsoDateFormat,
TypeNameHandling = TypeNameHandling.Auto
});
return scheduledTask;
}
After deserialization, scheduledTask.Frequency.Date failed to be parsed and it is set to the default date time:"0001-01-01T00:00:00Z". (scheduledTask.LastRun is parsed successfully)
I would really appreciate helping me to figure this problem out!! Thanks in advance