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

Unity中Newtonsoft.Json序列化int默认值0为字符串的问题求助

解决Newtonsoft.Json序列化int字段为0时转为字符串的问题

你遇到的问题是:当ResourceData类的Amount字段值为0时,Newtonsoft.Json会将其序列化为字符串类型的"0",而非预期的整数0,但其他整数值能正常序列化。

解决方法:自定义Json转换器强制处理int类型

可以通过自定义JsonConverter来确保所有int类型字段(包括值为0的情况)都被序列化为整数类型。

  1. 定义int类型转换器
public class IntConverter : JsonConverter<int>
{
    // 序列化时直接写入int值
    public override void WriteJson(JsonWriter writer, int value, JsonSerializer serializer)
    {
        writer.WriteValue(value);
    }

    // 反序列化时兼容字符串转int的情况(可选,按需保留)
    public override int ReadJson(JsonReader reader, Type objectType, int existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        if (reader.Value is string strValue)
        {
            return int.TryParse(strValue, out int result) ? result : 0;
        }
        return Convert.ToInt32(reader.Value);
    }
}
  1. 应用转换器
    有两种方式可以应用这个转换器:

方式一:局部字段应用

在Amount字段上标注[JsonConverter]特性,仅对该字段生效:

[Serializable]
public class ResourceData
{
    [JsonConverter(typeof(IntConverter))]
    public int Amount;
    public string Key;
}

方式二:全局配置应用

在JsonSerializerSettings中注册转换器,对所有int类型字段生效:

var jsonSettings = new JsonSerializerSettings
{
    DefaultValueHandling = DefaultValueHandling.Include,
    Converters = new List<JsonConverter> { new IntConverter() }
};

var resourceData = new ResourceData();
string jsonString = JsonConvert.SerializeObject(resourceData, jsonSettings);

验证效果

使用上述配置后,序列化值为0的Amount字段时,输出的JSON会是:

{
  "Amount": 0,
  "Key": ""
}

额外排查方向

如果问题依旧存在,检查项目中是否有全局注册的其他Json转换器,某些自定义转换器可能会干扰int类型的默认序列化逻辑,导致0被错误转为字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:49:57