FloatStringConverter.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. using System;
  2. using System.Text.Json;
  3. using System.Text.Json.Serialization;
  4. namespace MonoGame.Extended.Serialization.Json;
  5. public class FloatStringConverter : JsonConverter<float>
  6. {
  7. /// <inheritdoc />
  8. public override bool CanConvert(Type typeToConvert) => typeToConvert == typeof(float) || typeToConvert == typeof(string);
  9. /// <inheritdoc />
  10. public override float Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  11. {
  12. if (reader.TokenType == JsonTokenType.String)
  13. {
  14. if (float.TryParse(reader.GetString(), out float value))
  15. return value;
  16. }
  17. else if (reader.TokenType == JsonTokenType.Number)
  18. {
  19. return reader.GetSingle();
  20. }
  21. throw new JsonException($"Unable to convert value of type {reader.TokenType} to {typeof(float)}");
  22. }
  23. /// <inheritdoc />
  24. public override void Write(Utf8JsonWriter writer, float value, JsonSerializerOptions options)
  25. {
  26. ArgumentNullException.ThrowIfNull(writer);
  27. writer.WriteNumberValue(value);
  28. }
  29. }