AxibugEmuOnline/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/HexadecimalJsonConverter.cs

48 lines
1.6 KiB
C#
Raw Normal View History

2025-02-14 16:09:33 +08:00
using Newtonsoft.Json;
using System;
namespace Essgee.Utilities
{
public class HexadecimalJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
// TODO: maybe actually check things?
return true;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
switch (Type.GetTypeCode(value.GetType()))
{
case TypeCode.Byte:
case TypeCode.SByte:
writer.WriteValue($"0x{value:X2}");
break;
case TypeCode.UInt16:
case TypeCode.Int16:
writer.WriteValue($"0x{value:X4}");
break;
case TypeCode.UInt32:
case TypeCode.Int32:
writer.WriteValue($"0x{value:X8}");
break;
case TypeCode.UInt64:
case TypeCode.Int64:
writer.WriteValue($"0x{value:X16}");
break;
default:
throw new JsonSerializationException();
}
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if ((reader.Value is string value) && value.StartsWith("0x"))
return Convert.ChangeType(Convert.ToUInt64(value, 16), objectType);
else
throw new JsonSerializationException();
}
}
}