我使用的是使用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?

推荐答案

我终于找到了答案.3.x.x仅支持Newtonsoft.我找到的System.Text.Json代码是针对版本4的

https://github.com/quartznet/quartznet/discussions/2116

Csharp相关问答推荐

无法从具有一对多关系的C#类中使用Swagger创建记录

安装附加的. exe与Visual Studio

实体框架核心上是否支持使用NPGSQL的字符串聚合?

如何在Parall.ForEachAsync中使用CancerationTokenSource

创建临时Collection 最有效的方法是什么?堆栈分配和集合表达式之间的区别?

静态对象构造顺序

CA1508:';NULL=>;TRUE;始终为';TRUE';.移除或重构条件(S)以避免死代码

DbContext-传递自定义配置选项

Selify只更改第一个下拉菜单,然后忽略REST-C#

JsonSchema.Net删除假阳性判断结果

Polly重试URL复制值

如何在.NET Maui中将事件与MVVM一起使用?

如何在发布NuGet包之前设置命名空间?

在平行内使用跨度.用于循环

Xamarin.Forms-如何创建可 Select 的显示alert 或弹出窗口?

多个参数的最小API删除

使用DI实例化带有动态参数的服务?

在C#和HttpClient中使用REST API

C#;AvaloniaUI;MVVM;当另一个窗口上的按钮被单击时,如何更新视图图像源?

如何使ExecuteAsync异步运行