JsonIntToStringConverter.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System;
  2. using System.Buffers;
  3. using System.Buffers.Text;
  4. using System.Collections.Generic;
  5. using System.Text;
  6. using System.Text.Json;
  7. using System.Text.Json.Serialization;
  8. namespace TEAMModelOS.SDK.Extension
  9. {
  10. /// <summary>
  11. /// 允许或写入带引号的数字,之後.NET 5就不用這個轉換,改用[JsonNumberHandling]
  12. /// </summary>
  13. public class JsonIntToStringConverter : JsonConverter<int>
  14. {
  15. public override int Read(
  16. ref Utf8JsonReader reader, Type type, JsonSerializerOptions options)
  17. {
  18. if (reader.TokenType == JsonTokenType.String)
  19. {
  20. ReadOnlySpan<byte> span = reader.HasValueSequence ? reader.ValueSequence.ToArray() : reader.ValueSpan;
  21. if (Utf8Parser.TryParse(span, out int number, out int bytesConsumed) && span.Length == bytesConsumed)
  22. {
  23. return number;
  24. }
  25. if (int.TryParse(reader.GetString(), out number))
  26. {
  27. return number;
  28. }
  29. }
  30. return reader.GetInt32();
  31. }
  32. public override void Write(Utf8JsonWriter writer, int longValue, JsonSerializerOptions options) =>
  33. writer.WriteStringValue(longValue.ToString());
  34. }
  35. }