< Summary

Information
Class: Services.ApiServices.ArmtekApi.Converters.ArmtekFlexibleStringConverter
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/ArmtekApi/Converters/ArmtekFlexibleStringConverter.cs
Line coverage
60%
Covered lines: 6
Uncovered lines: 4
Coverable lines: 10
Total lines: 34
Line coverage: 60%
Branch coverage
75%
Covered branches: 9
Total branches: 12
Branch coverage: 75%
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(...)75%151271.42%
get_CanWrite()100%11100%
WriteJson(...)100%210%

File(s)

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

#LineLine coverage
 1using Newtonsoft.Json;
 2using Newtonsoft.Json.Linq;
 3
 4namespace Services.ApiServices.ArmtekApi.Converters;
 5
 6/// <summary>
 7/// Армтек отдаёт одно и то же логическое числовое поле то JSON-числом, то JSON-строкой
 8/// (проверено вживую на KWMENG_P: в одном ответе "0", в другом 0). Приводит любое входное
 9/// значение к string — самый безопасный общий знаменатель, т.к. часть полей этой природы
 10/// иногда содержит нечисловые значения (например, "-" для полей, неприменимых вне ЦЗ-заказов).
 11/// </summary>
 12public class ArmtekFlexibleStringConverter : JsonConverter
 13{
 014    public override bool CanConvert(Type objectType) => objectType == typeof(string);
 15
 16    public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serialize
 17    {
 23218        if (reader.TokenType == JsonToken.Null)
 019            return null;
 20
 23221        if (reader.TokenType is JsonToken.Integer or JsonToken.Float or JsonToken.Boolean)
 722            return reader.Value?.ToString();
 23
 22524        if (reader.TokenType == JsonToken.String)
 22525            return (string?)reader.Value;
 26
 027        return JToken.Load(reader).ToString();
 28    }
 29
 19230    public override bool CanWrite => false;
 31
 32    public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
 033        => throw new NotSupportedException($"{nameof(ArmtekFlexibleStringConverter)} поддерживает только чтение.");
 34}