- ABP Framework version: v3.3.1
Good morning,
I have hangfire job parameters that needs a custom serializer to be serialized.
For newtonsoft, I can add it like this:
var settings = new JsonSerializerSettings {Formatting = Formatting.Indented};
settings.Converters.Add(new LhirModelsJsonConverter());
var serializedData = JsonConvert.SerializeObject(bundle, settings);
How is it possible to define this custom serializer for a specific job, so that it is automatically used for serialization and deserialization of its arguments? I do not want to manually serialize the data before each insert and deserialize on the worker.
I use hangfire with the abp backgroundjob interface:
[BackgroundJobName("lhirInsert")]
public class FhirInsertArgs
{
public LhirData LhirData { get; set; }
}
_backgroundJobManager.EnqueueAsync(new LhirInsertArgs
{
LhirData = serializedData
});
Best regards and thank you for your help, Kevin
4 Answer(s)
-
0
hi
There is no function related to JSON serialization in abp's hangfire.
Maybe you can create a service to handle JSON serialization/deserialization.
-
0
Yes I have a service to deal with it. Now the problem is just that whoever uses the queue has to remember to do it with the service, and any errors will only occur on runtime.
And ABP is wrapping the jobs in such a way that I found no solution to extend it?
So best is the best way to implement the hangfire queuing logic by myself instead of using the ABP job library?
-
0
hi
You can consider replacing the services in the Volo.Abp.BackgroundJobs.HangFire package.
https://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.BackgroundJobs.HangFire/Volo/Abp/BackgroundJobs/Hangfire
-
0
Hi, this guided me into the right direction, thank you. The solution was pretty simple: Hangfire has a helper function to define json serializers for it globally:
var settings = new JsonSerializerSettings {Formatting = Formatting.Indented}; settings.Converters.Add(new LhirModelsJsonConverter()); GlobalConfiguration.Configuration.UseSerializerSettings(settings); // <-- from Hangfire.GlobalConfiguration
This can be applied in OnApplicationInitialization(). The converter will then be correctly applied to all models of the defined base class.