You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON反序列化报错:输入字符串'463.8525'不是有效整数

问题分析

反序列化JSON时触发错误:Input String '463.8525' is not a valid integer,且错误指向vat字段。核心原因是JSON中vat值的实际类型与模型定义的double类型不匹配——尽管你提供的JSON示例里vat是数字格式,但实际接口可能返回了字符串格式的小数(如"463.8525"),或者系统文化设置导致小数点解析逻辑冲突,让Json.NET误将其当作整数解析。另外你尝试的[JsonIgnore]无效,大概率是配置不规范导致。

解决方案

方案1:自定义转换器兼容字符串/数字格式的vat

如果接口返回的vat类型不稳定(有时是数字,有时是字符串),可以添加自定义JSON转换器强制解析为double:

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;

public class StringToDoubleConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(double) || objectType == typeof(double?);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.Value == null)
            return null;

        if (double.TryParse(reader.Value.ToString(), out double result))
            return result;

        throw new JsonSerializationException($"无法将值 {reader.Value} 转换为double类型");
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(value);
    }
}

在模型的vat字段上绑定该转换器:

[JsonConverter(typeof(StringToDoubleConverter))]
public double vat { get; set; }

方案2:调整模型字段类型提升容错性

  • 改为可空double类型,允许字段为空:
public double? vat { get; set; }
  • 或者先定义为字符串,后续手动转换为数值:
public string vat { get; set; }
// 业务逻辑中转换:
double vatValue = double.Parse(customer.vat, System.Globalization.CultureInfo.InvariantCulture);

方案3:让[JsonIgnore]生效

如果确实需要忽略vat字段,确保以下两点:

  1. 引用Newtonsoft.Json命名空间;
  2. 正确在vat字段上添加属性:
using Newtonsoft.Json;

public class customer
{
    // ... 其他字段
    [JsonIgnore]
    public double vat { get; set; }
    // ... 其他字段
}

方案4:指定文化信息解析小数点

如果是系统区域设置导致的小数点解析错误(比如用逗号作为小数点分隔符),反序列化时指定不变文化:

var settings = new JsonSerializerSettings
{
    Culture = System.Globalization.CultureInfo.InvariantCulture
};
var data = JsonConvert.DeserializeObject<Data>(readTask, settings);

额外排查

检查Lastpayments类中的字段(如amountPaid为int?),如果JSON中该字段是小数,也可能引发类似错误,但根据你的错误提示,优先聚焦vat字段的类型匹配问题。

内容的提问来源于stack exchange,提问作者Haybee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:45:43