public static JsonSerializerSettings NormalizeDecimals(this JsonSerializerSettings settings) { if (settings == null) { throw new ArgumentNullException(nameof(settings)); } Contract.EndContractBlock(); JsonConverter?existing = settings.Converters.FirstOrDefault(c => c is JsonConverter <decimal>); var existingNullable = settings.Converters.FirstOrDefault(c => c is JsonConverter <decimal?>); if (existing is JsonDecimalConverter && existingNullable is JsonNullableDecimalConverter) { return(settings); } if (existing == null && existingNullable == null) { return(settings .AddConverter(JsonDecimalConverter.Instance) .AddConverter(JsonNullableDecimalConverter.Instance)); } if (existing != null) { throw new InvalidOperationException("A specific decimal converter already exists."); } throw new InvalidOperationException("A specific Nullable<decimal> converter already exists."); }
static JsonSerializerSettings RoundDoublesCore(this JsonSerializerSettings settings, int maxDecimals) { var existing = settings.Converters.FirstOrDefault(c => c is JsonConverter <double>); if (existing == null) { return(settings.AddConverter(new JsonDoubleRoundingConverter(maxDecimals))); } if (existing is JsonDoubleRoundingConverter e && e.Maximum == maxDecimals) { return(settings); } throw new InvalidOperationException("A specific double converter already exists."); }
static JsonSerializerSettings RoundNullableDecimalsCore(this JsonSerializerSettings settings, int maxDecimals) { JsonConverter?existing = settings.Converters.FirstOrDefault(c => c is JsonConverter <decimal?>); if (existing is JsonNullableDecimalConverter && existing.GetType() == typeof(JsonNullableDecimalConverter)) { settings.Converters.Remove(existing); existing = null; } if (existing == null) { return(settings.AddConverter(new JsonNullableDecimalRoundingConverter(maxDecimals))); } if (existing is JsonNullableDecimalRoundingConverter e && e.Maximum == maxDecimals) { return(settings); } throw new InvalidOperationException("A specific Nullable<decimal> converter already exists."); }