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

C#如何将JSON中十六进制字符串反序列化为int类型

解决方案

错误原因

  • 不应该使用existingValue参数取值:该参数代表目标属性在反序列化开始前已有的默认值,而非JSON中携带的待转换值,JSON当前节点的值需要从reader.Value中读取
  • 十六进制转int缺少进制标识:Convert.ToInt32默认按十进制字符串解析,需要传入第二个参数16指定按照十六进制格式转换

修正后的转换器代码

以下实现适配你当前使用的Newtonsoft.Json(Json.NET)库规范:

using Newtonsoft.Json;

public class myConverter : JsonConverter
{
    // 只有目标类型为int时启用该转换器
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(int);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        // 从JSON读取原始十六进制字符串值
        string hexStr = reader.Value?.ToString().Trim();
        // 可在此处补充空值、非法字符等校验逻辑
        // 指定按16进制转换为int类型
        return Convert.ToInt32(hexStr, 16);
    }

    // 无需支持序列化写入,直接关闭写入能力
    public override bool CanWrite => false;

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotSupportedException("该转换器仅支持读取转换,不支持写入序列化");
    }
}

验证效果

反序列化你的示例JSON即可得到预期结果:

string json = @"
{
   ""name"" : ""someName"",
   ""id"" : ""b1""
}";

Person person = JsonConvert.DeserializeObject<Person>(json);
// 此时person.id的值为177,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:45:05