C# Json 将十六进制文字字符串转换为 int
C# Json converting hex literal string to int
有点卡住了,(我觉得自己真的很困惑)。
我想将 JSON 字符串的值从十六进制的字符串表示形式转换为 int。我只需要得到我永远不需要用其他方式写的值。
例如
{
"name" : "someName",
"id" : "b1"
}
我创建了一个class
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;
}
我当然会添加额外的检查来验证数据,但我想从一些东西开始,看看它是如何工作的。
所以对于上面的例子,我希望我的整数是 177
如有任何帮助和指导,我们将不胜感激。
尝试使用以下命令将十六进制数转换为整数
var hex = "b1"
int intValue = int.Parse(hex, System.Globalization.NumberStyles.HexNumber);
您在使用 Newtonsoft.Json
吗?我注意到您的代码无法在 .NET System.Text.Json
上运行,因为:
没有 public 非通用版本的 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();
}
}
class 必须包含要反序列化的属性:
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
。
有点卡住了,(我觉得自己真的很困惑)。
我想将 JSON 字符串的值从十六进制的字符串表示形式转换为 int。我只需要得到我永远不需要用其他方式写的值。
例如
{
"name" : "someName",
"id" : "b1"
}
我创建了一个class
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;
}
我当然会添加额外的检查来验证数据,但我想从一些东西开始,看看它是如何工作的。
所以对于上面的例子,我希望我的整数是 177
如有任何帮助和指导,我们将不胜感激。
尝试使用以下命令将十六进制数转换为整数
var hex = "b1"
int intValue = int.Parse(hex, System.Globalization.NumberStyles.HexNumber);
您在使用 Newtonsoft.Json
吗?我注意到您的代码无法在 .NET System.Text.Json
上运行,因为:
没有 public 非通用版本的
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();
}
}
class 必须包含要反序列化的属性:
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
。