在JSON.NET中将整数序列化为十六进制 [英] Serializing an integer as hexadecimal in JSON.NET
本文介绍了在JSON.NET中将整数序列化为十六进制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
JSON.NET supports deserializing hexadecimal numbers (e.g. 0xffff
), but how about serializing?
以下方法有效,但看起来太复杂了:
The following works, but seems far too complicated:
public sealed class HexJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(uint).Equals(objectType);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteRawValue($"0x{value:x}");
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanRead => false;
}
我正在寻找与 DateFormatHandling 类似的东西,仅用于整数.
I am looking for something along the lines of DateFormatHandling, only for integers.
推荐答案
正如注释中指出的那样,JSON中不允许使用十六进制文字(与JavaScript相反).
As pointed out in the comments, hexadecimal literals are not allowed in JSON (contrary to JavaScript).
将uint
值转换为十六进制字符串文字,反之亦然:
Converts uint
values to hexadecimal string literals and vice versa:
public sealed class HexStringJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(uint).Equals(objectType);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue($"0x{value:x}");
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var str = reader.ReadAsString();
if (str == null || !str.StartsWith("0x"))
throw new JsonSerializationException();
return Convert.ToUInt32(str);
}
}
用法示例
public sealed class CanonInfo
{
[JsonConverter(typeof(HexStringJsonConverter))]
public uint ModelId { get; set; }
[JsonConverter(typeof(HexStringJsonConverter))]
public uint FirmwareRevision { get; set; }
}
这篇关于在JSON.NET中将整数序列化为十六进制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文