通过使用JSON转换器将JSON转换为c#,我遇到了一个问题。我有一个十进制字段,而JSON具有一个指数值,该值未转换,因为十进制将其作为字符串而不是双精度值:
错误:无法将字符串转换为十进制:1.096E8
C#
public decimal Amount { get; set; }
JSON
"Amount":"1.096E8"
答案 0 :(得分:1)
如果您想用JsonConverter
转换指数,那么
public class MyClassName
{
[JsonConverter(typeof(JsonExponentialConverter))]
public decimal Amount { get; set; }
}
这是将您的指数转换为十进制的json转换器
public class JsonExponentialConverter : JsonConverter
{
public override bool CanRead { get { return true; } }
public override bool CanConvert(Type objectType)
{
return true;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
decimal amount = 0;
if (decimal.TryParse(reader.Value.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out amount))
{
return amount;
}
return amount;
}
}
然后使用json解串器之类调用上述类
public class Program
{
static void Main(string[] args)
{
var json = @"{'Amount':'1.096E8'}";
var amount = JsonConvert.DeserializeObject<MyClassName>(json);
}
}
输出:
答案 1 :(得分:0)
所以我使用了[JsonConstructor],我将其附加到我的类的自定义构造函数上。
这是代码。
class myClass
{
public decimal Amount { get; set; }
[JsonConstructor]
public myClass(string amount)
{
this.Amount = Decimal.Parse(amount, System.Globalization.NumberStyles.Float);
}
}