diff --git a/src/main/java/li/cil/oc2/common/bus/RPCDeviceBusAdapter.java b/src/main/java/li/cil/oc2/common/bus/RPCDeviceBusAdapter.java index a00272ae..31e463fa 100644 --- a/src/main/java/li/cil/oc2/common/bus/RPCDeviceBusAdapter.java +++ b/src/main/java/li/cil/oc2/common/bus/RPCDeviceBusAdapter.java @@ -11,6 +11,7 @@ import li.cil.oc2.api.bus.device.rpc.RPCParameter; import li.cil.oc2.common.Constants; import li.cil.oc2.common.bus.device.rpc.RPCDeviceList; import li.cil.oc2.common.bus.device.rpc.RPCMethodParameterTypeAdapters; +import li.cil.oc2.common.serialization.serializers.UnsignedByteArrayJsonSerializer; import li.cil.oc2.common.serialization.serializers.MessageJsonDeserializer; import li.cil.oc2.common.serialization.serializers.MethodInvocationJsonDeserializer; import li.cil.oc2.common.serialization.serializers.RPCDeviceWithIdentifierJsonSerializer; @@ -62,6 +63,7 @@ public final class RPCDeviceBusAdapter implements Steppable { this.serialDevice = serialDevice; this.transmitBuffer = ByteBuffer.allocate(maxMessageSize); this.gson = RPCMethodParameterTypeAdapters.beginBuildGson() + .registerTypeAdapter(byte[].class, new UnsignedByteArrayJsonSerializer()) .registerTypeAdapter(MethodInvocation.class, new MethodInvocationJsonDeserializer()) .registerTypeAdapter(Message.class, new MessageJsonDeserializer()) .registerTypeAdapter(RPCDeviceWithIdentifier.class, new RPCDeviceWithIdentifierJsonSerializer()) diff --git a/src/main/java/li/cil/oc2/common/serialization/serializers/UnsignedByteArrayJsonSerializer.java b/src/main/java/li/cil/oc2/common/serialization/serializers/UnsignedByteArrayJsonSerializer.java new file mode 100644 index 00000000..b102f4b2 --- /dev/null +++ b/src/main/java/li/cil/oc2/common/serialization/serializers/UnsignedByteArrayJsonSerializer.java @@ -0,0 +1,20 @@ +package li.cil.oc2.common.serialization.serializers; + +import com.google.gson.*; + +import java.lang.reflect.Type; + +public final class UnsignedByteArrayJsonSerializer implements JsonSerializer { + @Override + public JsonElement serialize(final byte[] src, final Type typeOfSrc, final JsonSerializationContext context) { + if (src == null) { + return JsonNull.INSTANCE; + } + + final JsonArray json = new JsonArray(); + for (final byte b : src) { + json.add(b & 0xFF); + } + return json; + } +}