I get an error that is 'Could not convert string to integer: 3.500. Path 'Quantity'' while json converting to object.
json :
{"ProductCalcKey":"xxx","PaperType":"1","Quantity":"3.500"}
object:
public class UnitPrice
{
public int UnitPriceId { get; set; }
public int QuantityMin { get; set; }
public int QuantityMax { get; set; }
public decimal Price { get; set; }
public string ProductCalcKey { get; set; }
public PaperType? PaperType { get; set; }
public int Quantity { get; set; }
}
I am using the following method.
protected object FromJsonToObject(Type t)
{
Context.Request.InputStream.Position = 0;
string json;
using (var reader = new StreamReader(Context.Request.InputStream))
{
json = reader.ReadToEnd();
}
// todo: string to integer such as '222.222.222'
return JsonConvert.DeserializeObject(json, t, new IsoDateTimeConverter());
}
How can I solve this problem without touching jsontext ?
I have solved the problem in this way.
public class FormatConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (objectType == typeof(int))
{
return Convert.ToInt32(reader.Value.ToString().Replace(".", string.Empty));
}
return reader.Value;
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(int);
}
}
[Test]
public void ConvertJson()
{
const string Json = "{\"ProductCalcKey\":\"xxx\",\"PaperType\":\"1\",\"Quantity\":\"3.500\"}";
var o = (UnitPrice)JsonConvert.DeserializeObject(Json, typeof(UnitPrice), new FormatConverter());
Assert.AreEqual(3500, o.Quantity);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With