C# Json 将十六进制文字字符串转换为 int
Posted
技术标签:
【中文标题】C# Json 将十六进制文字字符串转换为 int【英文标题】:C# Json converting hex literal string to int 【发布时间】:2022-01-07 06:58:00 【问题描述】:有点卡住了,(我觉得自己真的很困惑)。
我想将 JSON 字符串中的值从十六进制的字符串表示形式转换为 int。我只需要获得我永远不需要以其他方式编写的值。
例如
"name" : "someName",
"id" : "b1"
我创建了一个类
public class Person
public string name;
[JsonConverter(typeof(myConverter))]
public int id;
和我的转换器(我不确定我是否正确理解了这部分)
public class myConverter : JsonConverter
//CanConvert Boiler Plate
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
string sValue = existingValue.ToString().ToUpper();
int iValue = Convert.ToInt32(sValue);
return iValue;
我当然会添加额外的检查来验证数据,但我想从一些东西开始,看看它是如何工作的。
所以对于上面的例子,我希望我的 int 是 177
任何帮助,指导将不胜感激。
【问题讨论】:
Convert.ToInt32
采用第二个参数作为基数,传递 16。
这能回答你的问题吗? Convert integer to hexadecimal and back again
呃,我知道。让我试试吧,虽然我可能知道在某一时刻,但在这种情况下我忘记了。
恕我直言,我会使用int.Parse(existingValue, System.Globalization.NumberStyles.HexNumber);
。原因是您的十六进制值似乎没有以0x
为前缀,并且您当前的实现可能会失败。另一方面,如果它们有前缀,Convert.ToInt32(existingValue, 16);
就足够了。
这能回答你的问题吗? C# Hex String into Hex int
【参考方案1】:
尝试以下命令将十六进制数转换为整数
var hex = "b1"
int intValue = int.Parse(hex, System.Globalization.NumberStyles.HexNumber);
【讨论】:
【参考方案2】:你在使用Newtonsoft.Json
吗?我注意到您的代码无法在 .NET System.Text.Json
上运行,因为:
JsonConverter
没有公开的非通用版本。
它不适用于 id
,因为它不是属性。
这是System.Text.Json
的工作代码:
public class HexConverter : JsonConverter<int>
public override int Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
var value = reader.GetString();
return Convert.ToInt32(value, 16);
public override void Write(Utf8JsonWriter writer, int value, JsonSerializerOptions options)
throw new NotImplementedException();
该类必须包含要反序列化的属性:
public class Person
public string name get; set;
[JsonConverter(typeof(HexConverter))]
public int id get; set;
用法:
const string json = @"
""name"" : ""someName"",
""id"" : ""b1""
";
var person = JsonSerializer.Deserialize<Person>(json, new JsonSerializerOptions());
Console.WriteLine(person!.id);
// Result: 177
这种情况Convert.ToInt32
对我有用,但您也可以按照其他答案中的建议使用int.Parse
。
【讨论】:
我正在使用 Newtonsoft 是的。以上是关于C# Json 将十六进制文字字符串转换为 int的主要内容,如果未能解决你的问题,请参考以下文章