< Summary

Information
Class: Elsa.Resilience.Serialization.ResilienceStrategySerializer
Assembly: Elsa.Resilience.Core
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Resilience.Core/Serialization/ResilienceStrategySerializer.cs
Line coverage
96%
Covered lines: 31
Uncovered lines: 1
Coverable lines: 32
Total lines: 49
Line coverage: 96.8%
Branch coverage
83%
Covered branches: 5
Total branches: 6
Branch coverage: 83.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)83.33%6696.29%
get_SerializerOptions()100%11100%
Serialize(...)100%11100%
SerializeMany(...)100%11100%
Deserialize(...)100%11100%
DeserializeMany(...)100%11100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Resilience.Core/Serialization/ResilienceStrategySerializer.cs

#LineLine coverage
 1using System.Text.Json;
 2using System.Text.Json.Serialization;
 3using System.Text.Json.Serialization.Metadata;
 4using Elsa.Extensions;
 5using Elsa.Resilience.Options;
 6using Microsoft.Extensions.Options;
 7
 8namespace Elsa.Resilience.Serialization;
 9
 10public class ResilienceStrategySerializer
 11{
 12    private readonly JsonSerializerOptions _serializerOptions;
 13
 3514    public ResilienceStrategySerializer(IOptions<ResilienceOptions> options)
 15    {
 3516        var serializerOptions = new JsonSerializerOptions
 3517        {
 3518            TypeInfoResolver = new DefaultJsonTypeInfoResolver().WithAddedModifier(typeInfo =>
 3519            {
 8320                if (typeInfo.Type != typeof(IResilienceStrategy))
 6621                    return;
 3522
 1723                if (typeInfo.Kind != JsonTypeInfoKind.Object)
 024                    return;
 3525
 1726                var polymorphismOptions = new JsonPolymorphismOptions
 1727                {
 1728                    TypeDiscriminatorPropertyName = "$type"
 1729                };
 3530
 8231                foreach (var type in options.Value.StrategyTypes.ToList())
 2432                    polymorphismOptions.DerivedTypes.Add(new(type, type.Name));
 3533
 1734                typeInfo.PolymorphismOptions = polymorphismOptions;
 1735            }),
 3536            PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
 3537            PropertyNameCaseInsensitive = true,
 3538            NumberHandling = JsonNumberHandling.AllowReadingFromString
 3539        }.WithConverters(new JsonStringEnumConverter());
 40
 3541        _serializerOptions = serializerOptions;
 3542    }
 43
 944    public JsonSerializerOptions SerializerOptions => _serializerOptions;
 545    public string Serialize(IResilienceStrategy strategy) => JsonSerializer.Serialize(strategy, _serializerOptions);
 146    public string SerializeMany(IEnumerable<IResilienceStrategy> strategies) => JsonSerializer.Serialize(strategies, _se
 347    public IResilienceStrategy Deserialize(string json) => JsonSerializer.Deserialize<IResilienceStrategy>(json, _serial
 148    public IEnumerable<IResilienceStrategy> DeserializeMany(string json) => JsonSerializer.Deserialize<IEnumerable<IResi
 49}