Merge pull request #6272 from elsa-workflows/perf/serialization
Refactor JsonWorkflowStateSerializer to improve performance
This commit is contained in:
commit
ace32dd50e
|
|
@ -1,6 +1,6 @@
|
|||
<Project>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ internal class ImportFiles : ElsaEndpoint<WorkflowDefinitionModel>
|
|||
|
||||
private async Task ImportJsonStreamAsync(Stream jsonStream, CancellationToken cancellationToken)
|
||||
{
|
||||
var json = await new StreamReader(jsonStream).ReadToEndAsync();
|
||||
var json = await new StreamReader(jsonStream).ReadToEndAsync(cancellationToken);
|
||||
var model = _apiSerializer.Deserialize<WorkflowDefinitionModel>(json);
|
||||
await ImportSingleWorkflowDefinitionAsync(model, cancellationToken);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Text.Json.Serialization.Metadata;
|
||||
using Elsa.Common.Serialization;
|
||||
using Elsa.Expressions.Contracts;
|
||||
using Elsa.Workflows.Serialization.Converters;
|
||||
|
|
@ -129,29 +127,18 @@ public class JsonWorkflowStateSerializer : ConfigurableSerializer, IWorkflowStat
|
|||
/// <inheritdoc />
|
||||
public override JsonSerializerOptions GetOptions()
|
||||
{
|
||||
// Bypass cached options to ensure that the reference handler is always fresh.
|
||||
return GetOptionsInternal();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Configure(JsonSerializerOptions options)
|
||||
{
|
||||
var referenceHandler = new CrossScopedReferenceHandler();
|
||||
|
||||
options.ReferenceHandler = referenceHandler;
|
||||
options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
|
||||
options.PropertyNameCaseInsensitive = true;
|
||||
options.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
|
||||
var options = base.GetOptions();
|
||||
return new JsonSerializerOptions(options)
|
||||
{
|
||||
ReferenceHandler = new CrossScopedReferenceHandler()
|
||||
};
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void AddConverters(JsonSerializerOptions options)
|
||||
{
|
||||
options.Converters.Add(new JsonStringEnumConverter());
|
||||
options.Converters.Add(new TypeJsonConverter(_wellKnownTypeRegistry));
|
||||
options.Converters.Add(JsonMetadataServices.TimeSpanConverter);
|
||||
options.Converters.Add(new PolymorphicObjectConverterFactory(_wellKnownTypeRegistry));
|
||||
options.Converters.Add(new TypeJsonConverter(_wellKnownTypeRegistry));
|
||||
options.Converters.Add(new VariableConverterFactory(_wellKnownTypeRegistry, _loggerFactory));
|
||||
}
|
||||
}
|
||||
|
|
@ -36,7 +36,7 @@ namespace Elsa.Workflows.Management.Services
|
|||
// Get a workflow draft version.
|
||||
var draft = !string.IsNullOrWhiteSpace(definitionId)
|
||||
? await _workflowDefinitionPublisher.GetDraftAsync(definitionId, VersionOptions.Latest, cancellationToken)
|
||||
: default;
|
||||
: null;
|
||||
|
||||
var isNew = draft == null;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue