使用 Newtonsoft.Json 反序列化 JSON 时将小数转换为整数

Geo*_*rge 5 .net json.net

使用 Newtonsoft.Json 反序列化 JSON 时是否可以将小数转换为整数?

突然,我们的服务接收到包含需要 int 类型的十进制值的 JSON 数据,例如:18483.0。

因此,会引发异常,例如“Newtonsoft.Json.JsonReaderException:输入字符串‘18483.0’不是有效的整数”。

显然,这个特定属性被定义为整数,我不想将其更改为某种小数类型,而是将输入转换为 int,并去除小数(无论如何总是 .0)。

Eld*_*dar 5

您可以有一个自定义通用,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的建议