Unity中Newtonsoft.Json序列化int默认值0为字符串的问题求助
解决Newtonsoft.Json序列化int字段为0时转为字符串的问题
你遇到的问题是:当ResourceData类的Amount字段值为0时,Newtonsoft.Json会将其序列化为字符串类型的"0",而非预期的整数0,但其他整数值能正常序列化。
解决方法:自定义Json转换器强制处理int类型
可以通过自定义JsonConverter来确保所有int类型字段(包括值为0的情况)都被序列化为整数类型。
- 定义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); } }
- 应用转换器
有两种方式可以应用这个转换器:
方式一:局部字段应用
在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
相关产品推荐
相关产品推荐

