splitter/splitter-cli/FlexibleDoubleConverter.cs

32 lines
905 B
C#

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