splitter/splitter-cli/probe/FlexibleLongConverter.cs

31 lines
901 B
C#

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