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

JsonConvert.DeserializeObject无法自动反序列化字符串为uint怎么办?

JSON字符串转uint反序列化报错的解决方法

你的问题是因为Newtonsoft.Json默认不会自动把字符串类型的数字转换为uint值类型,需要显式添加转换逻辑,以下几种方案可以解决:

方案一:为属性添加自定义转换器

先编写一个字符串转uint的转换器:

public class StringToUIntConverter : JsonConverter<uint>
{
    public override uint ReadJson(JsonReader reader, Type objectType, uint existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.String)
        {
            if (uint.TryParse(reader.Value.ToString(), out uint result))
            {
                return result;
            }
            throw new JsonSerializationException($"无法将字符串\"{reader.Value}\"转换为uint类型");
        }
        else if (reader.TokenType == JsonToken.Integer)
        {
            return Convert.ToUInt32(reader.Value);
        }
        throw new JsonSerializationException($"不支持的Token类型:{reader.TokenType}");
    }

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

然后在实体类的属性上标注该转换器:

public class CustmObj
{
   [JsonProperty("fileNumber")]
   [JsonConverter(typeof(StringToUIntConverter))]
   public uint FileNumber { get; set; }
}

反序列化时就会自动把字符串"1"转换成uint类型的1。

方案二:通过中间字符串属性转换

如果不想编写转换器,可以添加一个字符串类型的中间属性,再通过只读属性获取uint值:

public class CustmObj
{
   [JsonProperty("fileNumber")]
   public string FileNumberStr { get; set; }

   [JsonIgnore]
   public uint FileNumber => uint.Parse(FileNumberStr);
}

这种方式适合只需要反序列化读取值的场景,如果需要将对象序列化为JSON,FileNumber属性会被忽略。

方案三:全局配置转换器

如果多个地方都需要这种字符串转uint的转换,可以全局配置转换器,无需给每个属性单独加特性:

var serializerSettings = new JsonSerializerSettings();
serializerSettings.Converters.Add(new StringToUIntConverter());

CustmObj jFile = JsonConvert.DeserializeObject<CustmObj>(json, serializerSettings);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:39:55