123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #if NET5_0_OR_GREATER
- using System;
- using System.Text.Json;
- using System.Text.Json.Serialization;
- namespace Masuit.Tools.Systems.Text.Json;
- public class MaskConverter : JsonConverter<string>
- {
- /// <summary>Reads and converts the JSON to type <typeparamref name="T" />.</summary>
- /// <param name="reader">The reader.</param>
- /// <param name="typeToConvert">The type to convert.</param>
- /// <param name="options">An object that specifies serialization options to use.</param>
- /// <returns>The converted value.</returns>
- public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
- {
- return reader.GetString();
- }
- /// <summary>Writes a specified value as JSON.</summary>
- /// <param name="writer">The writer to write to.</param>
- /// <param name="value">The value to convert to JSON.</param>
- /// <param name="options">An object that specifies serialization options to use.</param>
- public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
- {
- writer.WriteStringValue(string.IsNullOrEmpty(value) ? value : value.Mask());
- }
- }
- public class MaskEmailConverter : JsonConverter<string>
- {
- /// <summary>Reads and converts the JSON to type <typeparamref name="T" />.</summary>
- /// <param name="reader">The reader.</param>
- /// <param name="typeToConvert">The type to convert.</param>
- /// <param name="options">An object that specifies serialization options to use.</param>
- /// <returns>The converted value.</returns>
- public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
- {
- return reader.GetString();
- }
- /// <summary>Writes a specified value as JSON.</summary>
- /// <param name="writer">The writer to write to.</param>
- /// <param name="value">The value to convert to JSON.</param>
- /// <param name="options">An object that specifies serialization options to use.</param>
- public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
- {
- writer.WriteStringValue(string.IsNullOrEmpty(value) ? value : value.MaskEmail());
- }
- }
- public class ObjectJsonConverter : JsonConverter<object>
- {
- public override object? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
- {
- if (reader.TokenType == JsonTokenType.String)
- {
- if (DateTime.TryParse(reader.GetString(), out DateTime dateTime))
- return dateTime;
- return reader.GetString();
- }
- if (reader.TokenType == JsonTokenType.Number)
- {
- if (reader.TryGetInt32(out int intNum))
- return intNum;
- if (reader.TryGetDouble(out double doubleNum))
- return doubleNum;
- return reader.GetDecimal();
- }
- return reader.GetDecimal();
- }
- public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
- {
- Type objType = value.GetType();
- if (value == null)
- writer.WriteNullValue();
- if (objType == typeof(string) || objType == typeof(DateTime) || objType == typeof(Guid))
- writer.WriteStringValue(value.ToString());
- else if (objType == typeof(int))
- writer.WriteNumberValue((int)value);
- else if (objType == typeof(double))
- writer.WriteNumberValue((double)value);
- else if (objType == typeof(decimal))
- writer.WriteNumberValue((decimal)value);
- else if (objType == typeof(char))
- writer.WriteNumberValue((char)value);
- else if (objType == typeof(bool))
- writer.WriteBooleanValue((bool)value);
- else
- writer.WriteStringValue(value.ToString());
- }
- }
- public class DateTimeJsonConverter : JsonConverter<DateTime>
- {
- public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
- {
- if (reader.TokenType == JsonTokenType.String)
- {
- if (DateTime.TryParse(reader.GetString(), out DateTime dateTime))
- {
- return dateTime;
- }
- }
- return reader.GetDateTime();
- }
- public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
- {
- writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss"));
- }
- }
- #endif
|