splitter/splitter-cli/probe/FlexibleIntConverter.cs

32 lines
897 B
C#

using System.Globalization;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace splitter.probe;
public sealed class FlexibleIntConverter : JsonConverter<int?>
{
public override int? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.Number)
return reader.GetInt32();
if (reader.TokenType == JsonTokenType.String)
{
var s = reader.GetString();
if (int.TryParse(s, NumberStyles.Integer, CultureInfo.InvariantCulture, out var v))
return v;
}
return null;
}
public override void Write(Utf8JsonWriter writer, int? value, JsonSerializerOptions options)
{
if (value.HasValue)
writer.WriteNumberValue(value.Value);
else
writer.WriteNullValue();
}
}