using Newtonsoft.Json; using System.Buffers.Text; namespace YLErp.Converter { public class QuotedInt32Converter_Nullable : JsonConverter { private const Int32 defaultValue = default(Int32); public override Int32? ReadJson(JsonReader reader, Type objectType, Int32? existingValue, bool hasExistingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.String) { if (string.IsNullOrWhiteSpace(reader.Value?.ToString())) { if (Nullable.GetUnderlyingType(objectType) != null) { return null; } return defaultValue; } if (Int32.TryParse(reader.ReadAsString(), out Int32 number)) return number; } return (Int32?)reader.Value; } public override void WriteJson(JsonWriter writer, Int32? value, JsonSerializer serializer) { if (!value.HasValue) { writer.WriteNull(); } else { writer.WriteValueAsync(value); } } } }