В общем, кому интересно, в итоге написал JSON.Net конвертер, который заменяет запятую на точку и зарегистрировал его глобально (оказывается так можно) чтобы обрабатывались все decimal.
Конвертер:
public class DecimalFormatConverter: JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(decimal) || objectType == typeof(decimal?));
}
public override void WriteJson(
JsonWriter writer,
object value,
JsonSerializer serializer)
{
writer.WriteValue(value);
}
public override object ReadJson(
JsonReader reader,
Type objectType,
object existingValue,
JsonSerializer serializer)
{
if (reader.Value != null)
{
try
{
string replacedValue = reader.Value.ToString().Replace(',', '.');
return decimal.Parse(replacedValue, CultureInfo.InvariantCulture);
}
catch (Exception ex)
{
throw new Exception(
String.Format("Decimal coverting error. Message: {0}.", ex.Message));
}
}
return null;
}
}
И его глобальная регистрация в файле
Global.asax.cs в методе
Application_Start():
...
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new DecimalFormatConverter());
...
Но все же, интересно послушать критику такого подхода и способы решения из разряда Best Practices, наверняка сталкивались?