gpt4 book ai didi

c# - 在 JSON.NET 中将整数序列化为十六进制

转载 作者:行者123 更新时间:2023-11-30 21:41:20 25 4
gpt4 key购买 nike

JSON.NET 支持 deserializing hexadecimal numbers (例如 0xffff),但是如何序列化

下面的工作,但似乎太复杂了:

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 类似的东西, 仅适用于整数。

最佳答案

正如评论中所指出的,JSON 中不允许使用十六进制文字(与 JavaScript 相反)。

转换器

uint 值转换为十六进制字符串文字,反之亦然:

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; }
}

关于c# - 在 JSON.NET 中将整数序列化为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43481456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com