使用 Newtonsoft.Json 反序列化 JSON 时是否可以将小数转换为整数?
突然,我们的服务接收到包含需要 int 类型的十进制值的 JSON 数据,例如:18483.0。
因此,会引发异常,例如“Newtonsoft.Json.JsonReaderException:输入字符串‘18483.0’不是有效的整数”。
显然,这个特定属性被定义为整数,我不想将其更改为某种小数类型,而是将输入转换为 int,并去除小数(无论如何总是 .0)。
您可以有一个自定义通用,JsonConverter
如下所示:
public class CustomIntConverter : JsonConverter<int>
{
public override void WriteJson(JsonWriter writer, int value, JsonSerializer serializer)
{
writer.WriteValue(value.ToString());
}
public override int ReadJson(JsonReader reader, Type objectType, int existingValue, bool hasExistingValue, JsonSerializer serializer)
{
return Convert.ToInt32(reader.Value);
}
}
Run Code Online (Sandbox Code Playgroud)
如果失败,它会尝试将其转换为整数,然后将其转换为 double,然后转换为 int。您可以像下面这样使用它:
var json = @"{""B"":42.0}";
var result = JsonConvert.DeserializeObject<A>(json, new CustomIntConverter());
Run Code Online (Sandbox Code Playgroud)
编辑 应用@vernou的建议