JsonConvertOverride.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using Newtonsoft.Json;
  2. using System.Text.Json;
  3. using System.Text.Json.Serialization;
  4. namespace OASystem.API.OAMethodLib
  5. {
  6. #region 日期格式转换("yyyy-MM-dd HH;mm:ss")
  7. public class DateTimeJsonConverter : System.Text.Json.Serialization.JsonConverter<DateTime>
  8. {
  9. private readonly string Format;
  10. public DateTimeJsonConverter(string format)
  11. {
  12. Format = format;
  13. }
  14. public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  15. {
  16. if (string.IsNullOrEmpty(reader.GetString()))
  17. {
  18. return default(DateTime);
  19. }
  20. return DateTime.ParseExact(reader.GetString(), Format, null);
  21. }
  22. public override void Write(Utf8JsonWriter writer, DateTime date, JsonSerializerOptions options)
  23. {
  24. writer.WriteStringValue(date.ToString(Format));
  25. }
  26. //public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  27. //{
  28. // return DateTime.ParseExact(reader.GetString(), Format, null);
  29. //}
  30. }
  31. #endregion
  32. #region String null值转换(读/写)
  33. public class NullJsonConverter : System.Text.Json.Serialization.JsonConverter<string>
  34. {
  35. public override bool HandleNull => true;
  36. public override string Read(
  37. ref Utf8JsonReader reader,
  38. Type typeToConvert,
  39. JsonSerializerOptions options) =>
  40. reader.GetString() ?? "";
  41. public override void Write(
  42. Utf8JsonWriter writer,
  43. string value,
  44. JsonSerializerOptions options) =>
  45. writer.WriteStringValue(value ?? "");
  46. }
  47. #endregion
  48. #region decimal格式化 decimalPlaces=3 应用自定义的序列化器,并指定小数位数为 3
  49. public class DecimalConverter : System.Text.Json.Serialization.JsonConverter<decimal>
  50. {
  51. private readonly int decimalPlaces;
  52. public DecimalConverter(int decimalPlaces = 2)
  53. {
  54. this.decimalPlaces = decimalPlaces;
  55. }
  56. public override decimal Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  57. {
  58. if (reader.TokenType == JsonTokenType.Number)
  59. return reader.GetDecimal();
  60. else
  61. throw new System.Text.Json.JsonException();
  62. }
  63. public override void Write(Utf8JsonWriter writer, decimal value, JsonSerializerOptions options)
  64. {
  65. string formatString = "0." + new string('0', decimalPlaces);
  66. string formattedValue = value.ToString(formatString); // 格式化字符串,保留指定位数的小数
  67. writer.WriteStringValue(formattedValue);
  68. }
  69. }
  70. #endregion
  71. }