在Quartz.net中每次执行后,JobData都不会保留

我有一份工作,我想跟踪最近的50次跑步。 由于某种原因,似乎状态不是存储在我的简单原型中:

[PersistJobDataAfterExecution] public class ApiJob : IJob { private const string JobRunsKey = "jobRuns"; private const int HistoryToKeep = 50; private const string UrlKey = "Url"; public void Execute(IJobExecutionContext context) { var jobDataMap = context.JobDetail.JobDataMap; var url = context.JobDetail.JobDataMap.GetString(UrlKey); var client = new RestClient(url); var request = new RestRequest(Method.POST); var response = client.Execute(request); var runs = new List(); if (jobDataMap.ContainsKey(JobRunsKey)) { runs = (List) jobDataMap[JobRunsKey]; } Console.WriteLine("I'm running so fast!"); runs.Insert(0, new JobRun(){Message = "Hello", Result = JobResult.Ok, TimeForRun = DateTime.UtcNow}); while (runs.Count > HistoryToKeep) { runs.RemoveAt(HistoryToKeep); } jobDataMap.Put(JobRunsKey, runs); } } 

我尝试使用jobDataMap.Put(JobRunsKey, runs)存储新列表,但是当我下次触发作业时, JobDataMap缺少键。 有什么建议?

您可能没有将JobRun类标记为Serializable

这应该工作

 [Serializable] public class JobRun { public string Message ; public string Result ; public DateTime TimeForRun ; }