< Summary

Information
Class: Elsa.Workflows.Serialization.Converters.TypeJsonConverter
Assembly: Elsa.Workflows.Core
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Core/Serialization/Converters/TypeJsonConverter.cs
Line coverage
100%
Covered lines: 15
Uncovered lines: 0
Coverable lines: 15
Total lines: 58
Line coverage: 100%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.ctor()100%11100%
CanConvert(...)100%22100%
Read(...)100%44100%
Write(...)100%22100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Core/Serialization/Converters/TypeJsonConverter.cs

#LineLine coverage
 1using System.Text.Json;
 2using System.Text.Json.Serialization;
 3using Elsa.Extensions;
 4using JetBrains.Annotations;
 5using Elsa.Common.Serialization;
 6
 7namespace Elsa.Workflows.Serialization.Converters;
 8
 9/// <summary>
 10/// Serializes <see cref="Type"/> objects to a simple alias representing the type.
 11/// Unregistered types are written as metadata-only aliases and intentionally deserialize to <see cref="Exception"/> ins
 12/// </summary>
 13[UsedImplicitly]
 14public class TypeJsonConverter : JsonConverter<Type>
 15{
 16    /// <summary>
 17    /// Prefix for unregistered type metadata that is not used for CLR type loading during deserialization.
 18    /// </summary>
 19    private const string UnregisteredTypeAliasPrefix = "UnregisteredClrType:";
 20    private readonly ISerializationTypeRegistry _workflowJsonTypeRegistry;
 21
 22    /// <inheritdoc />
 3429123    public TypeJsonConverter(ISerializationTypeRegistry workflowJsonTypeRegistry)
 24    {
 3429125        _workflowJsonTypeRegistry = workflowJsonTypeRegistry;
 3429126    }
 27
 28    /// <inheritdoc />
 629    public TypeJsonConverter()
 30    {
 631        _workflowJsonTypeRegistry = SerializationTypeRegistry.CreateDefault();
 632    }
 33
 34    /// <inheritdoc />
 35    public override bool CanConvert(Type typeToConvert)
 36    {
 73322737        return typeToConvert == typeof(Type) || typeToConvert.FullName == "System.RuntimeType";
 38    }
 39
 40    /// <inheritdoc />
 41    public override Type? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
 42    {
 505643        var typeAlias = reader.GetString();
 505644        if (typeAlias?.StartsWith(UnregisteredTypeAliasPrefix, StringComparison.Ordinal) == true)
 445            return typeof(Exception);
 46
 505247        return SerializationTypeResolver.ResolveType(_workflowJsonTypeRegistry, typeAlias);
 48    }
 49
 50    /// <inheritdoc />
 51    public override void Write(Utf8JsonWriter writer, Type value, JsonSerializerOptions options)
 52    {
 1280153        if (!SerializationTypeResolver.TryGetAlias(_workflowJsonTypeRegistry, value, out var typeAlias))
 454            typeAlias = $"{UnregisteredTypeAliasPrefix}{value.GetSimpleAssemblyQualifiedName()}";
 55
 1280156        writer.WriteStringValue(typeAlias);
 1280157    }
 58}