我使用的是使用Quarz.Net 3.7.0的.Net 7(.Net核心)项目. 该项目配置了各种转换器:
builder.Services.AddControllers(options =>
{
//...
})
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new StringIdConverter());
options.JsonSerializerOptions.Converters.Add(new UshortIdConverter());
});
它负责将各种id从对象转换为字符串或整数.我目前正在使用它,它在API上运行得很好.
我将Quartz注册如下:
services.AddQuartz(q =>
{
q.SetProperty("quartz.serializer.type", "json");
q.UsePersistentStore(p =>
{
p.UseMySql(Environment.GetEnvironmentVariable("MYSQL_CONNECTION_STRING"));
});
});
// ASP.NET Core hosting
services.AddQuartzServer(options =>
{
options.AwaitApplicationStarted = true;
// when shutting down we want jobs to complete gracefully
options.WaitForJobsToComplete = true;
});
然而,当作业(job)正在执行时,我得到了一个异常:
Newtonsoft.Json.JsonSerializationException:找不到用于类型Common.Domain.Identity.UnitId的构造函数.
我可以看到它正在try 使用Newtonsoft,但我希望它使用System.Text.Json序列化程序.我已经安装了Quartz.Serialization包,可以看到它具有针对System.Text.Json的功能: https://github.com/quartznet/quartznet/tree/main/src/Quartz.Serialization.SystemTextJson个
如何将Quartz配置为使用System.Text.Json而不是Newtonsoft?