< Summary

Information
Class: Services.ApiServices.ArmtekApi.Converters.ArmtekEmptyStringAsListConverter<T>
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/ArmtekApi/Converters/ArmtekEmptyStringAsListConverter.cs
Line coverage
50%
Covered lines: 4
Uncovered lines: 4
Coverable lines: 8
Total lines: 30
Line coverage: 50%
Branch coverage
66%
Covered branches: 4
Total branches: 6
Branch coverage: 66.6%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
CanConvert(...)100%210%
ReadJson(...)66.66%6680%
get_CanWrite()100%210%
WriteJson(...)100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/ArmtekApi/Converters/ArmtekEmptyStringAsListConverter.cs

#LineLine coverage
 1using Newtonsoft.Json;
 2
 3namespace Services.ApiServices.ArmtekApi.Converters;
 4
 5/// <summary>
 6/// Армтек присылает пустую строку "" вместо пустого массива [] для табличных полей, когда
 7/// соответствующие данные не запрашивались (проверено вживую: CASH/AUGRU_OUTPUT в getInvoice
 8/// при REFLAG != 1). Newtonsoft по умолчанию падает на "" при десериализации List&lt;T&gt; —
 9/// конвертер трактует "" и null как пустой список, а настоящий JSON-массив десериализует как есть.
 10/// </summary>
 11public class ArmtekEmptyStringAsListConverter<T> : JsonConverter
 12{
 013    public override bool CanConvert(Type objectType) => objectType == typeof(List<T>);
 14
 15    public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serialize
 16    {
 3617        if (reader.TokenType is JsonToken.Null)
 018            return new List<T>();
 19
 3620        if (reader.TokenType is JsonToken.String)
 3421            return new List<T>();
 22
 223        return serializer.Deserialize<List<T>>(reader) ?? new List<T>();
 24    }
 25
 026    public override bool CanWrite => false;
 27
 28    public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
 029        => throw new NotSupportedException($"{nameof(ArmtekEmptyStringAsListConverter<T>)} поддерживает только чтение.")
 30}