public static void Main()
""EighteenSigFigs"" : 9999999999999999.99,
""SeventeenSigFigs"" : 999999999999999.99,
""SixteenSigFigs"" : 99999999999999.99,
""FifthteenSigFigs"" : 9999999999999.99
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new DecimalJsonConverter());
settings.Formatting = Formatting.Indented;
Foo foo = JsonConvert.DeserializeObject<Foo>(json, settings);
Console.WriteLine("EighteenSigFigs: " + foo.EighteenSigFigs);
Console.WriteLine("SeventeenSigFigs: " + foo.SeventeenSigFigs);
Console.WriteLine("SixteenSigFigs: " + foo.SixteenSigFigs);
Console.WriteLine("FifthteenSigFigs: " + foo.FifthteenSigFigs);
json = JsonConvert.SerializeObject(foo, settings);
public decimal EighteenSigFigs { get; set; }
public decimal SeventeenSigFigs { get; set; }
public decimal SixteenSigFigs { get; set; }
public decimal FifthteenSigFigs { get; set; }
public class DecimalJsonConverter : JsonConverter
public override bool CanConvert(Type objectType)
return (objectType == typeof(decimal));
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
if (reader.TokenType == JsonToken.String)
string value = (string)reader.Value;
if (value == string.Empty)
else if (reader.TokenType == JsonToken.Float ||
reader.TokenType == JsonToken.Integer)
return Convert.ToDecimal(reader.Value);
throw new JsonSerializationException("Unexpected token type: " + reader.TokenType.ToString());
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
decimal dec = (decimal)value;
if (dec == decimal.MinValue)
writer.WriteValue(string.Empty);