diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/BooleanArrayDeserializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/BooleanArrayDeserializer.java
new file mode 100644
index 0000000..daaf64a
--- /dev/null
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/BooleanArrayDeserializer.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2016, 2020 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0,
+ * or the Eclipse Distribution License v. 1.0 which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
+ */
+
+package org.eclipse.yasson.internal.serializer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.yasson.internal.Unmarshaller;
+
+/**
+ * Array unmarshaller item implementation for small int.
+ */
+public class BooleanArrayDeserializer extends AbstractArrayDeserializer<boolean[]> {
+
+    private final List<Boolean> items = new ArrayList<>();
+
+    /**
+     * Creates new instance of byte array deserializer.
+     *
+     * @param builder deserializer builder
+     */
+    protected BooleanArrayDeserializer(DeserializerBuilder builder) {
+        super(builder);
+    }
+
+    @Override
+    protected List<?> getItems() {
+        return items;
+    }
+
+    @Override
+    public boolean[] getInstance(Unmarshaller unmarshaller) {
+        final int size = items.size();
+        final boolean[] byteArray = new boolean[size];
+        for (int i = 0; i < size; i++) {
+            byteArray[i] = items.get(i);
+        }
+        return byteArray;
+    }
+}
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/BooleanArraySerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/BooleanArraySerializer.java
new file mode 100644
index 0000000..1c05f72
--- /dev/null
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/BooleanArraySerializer.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2016, 2020 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0,
+ * or the Eclipse Distribution License v. 1.0 which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
+ */
+
+package org.eclipse.yasson.internal.serializer;
+
+import jakarta.json.bind.serializer.SerializationContext;
+import jakarta.json.stream.JsonGenerator;
+
+/**
+ * Serializes byte array as JSON array of ints.
+ */
+public class BooleanArraySerializer extends AbstractArraySerializer<boolean[]> {
+
+    /**
+     * Creates new instance of byte array serializer.
+     *
+     * @param builder serializer builder
+     */
+    protected BooleanArraySerializer(SerializerBuilder builder) {
+        super(builder);
+    }
+
+    @Override
+    protected void serializeInternal(boolean[] obj, JsonGenerator generator, SerializationContext ctx) {
+        for (boolean b : obj) {
+            generator.write(b);
+        }
+    }
+
+}
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/DeserializerBuilder.java b/src/main/java/org/eclipse/yasson/internal/serializer/DeserializerBuilder.java
index f6aae84..ad8250e 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/DeserializerBuilder.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/DeserializerBuilder.java
@@ -287,6 +287,8 @@
             return new FloatArrayDeserializer(this);
         } else if (componentType == double.class) {
             return new DoubleArrayDeserializer(this);
+        } else if (componentType == boolean.class) {
+            return new BooleanArrayDeserializer(this);
         } else {
             return new ObjectArrayDeserializer(this);
         }
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/SerializerBuilder.java b/src/main/java/org/eclipse/yasson/internal/serializer/SerializerBuilder.java
index e74f5d7..1d6b2fa 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/SerializerBuilder.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/SerializerBuilder.java
@@ -140,6 +140,8 @@
             return new FloatArraySerializer(this);
         } else if (componentType == double.class) {
             return new DoubleArraySerializer(this);
+        } else if (componentType == boolean.class) {
+            return new BooleanArraySerializer(this);
         } else {
             return new ObjectArraySerializer<>(this);
         }
