diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/DefaultSerializers.java b/src/main/java/org/eclipse/yasson/internal/serializer/DefaultSerializers.java
index 9f2fd22..28f6f65 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/DefaultSerializers.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/DefaultSerializers.java
@@ -16,6 +16,7 @@
 import java.math.BigInteger;
 import java.net.URI;
 import java.net.URL;
+import java.nio.file.Path;
 import java.time.Duration;
 import java.time.Instant;
 import java.time.LocalDate;
@@ -118,6 +119,8 @@
                         new SerializerProviderWrapper(OptionalIntTypeSerializer::new, OptionalIntTypeDeserializer::new));
         serializers.put(OptionalLong.class,
                         new SerializerProviderWrapper(OptionalLongTypeSerializer::new, OptionalLongTypeDeserializer::new));
+        serializers.put(Path.class,
+                        new SerializerProviderWrapper(PathTypeSerializer::new, PathTypeDeserializer::new));
         serializers.put(Short.class, new SerializerProviderWrapper(ShortTypeSerializer::new, ShortTypeDeserializer::new));
         serializers.put(Short.TYPE, new SerializerProviderWrapper(ShortTypeSerializer::new, ShortTypeDeserializer::new));
         serializers.put(String.class, new SerializerProviderWrapper(StringTypeSerializer::new, StringTypeDeserializer::new));
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/PathTypeDeserializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/PathTypeDeserializer.java
new file mode 100644
index 0000000..87d231a
--- /dev/null
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/PathTypeDeserializer.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 IBM 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.lang.reflect.Type;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.eclipse.yasson.internal.Unmarshaller;
+import org.eclipse.yasson.internal.model.customization.Customization;
+
+public class PathTypeDeserializer extends AbstractValueTypeDeserializer<Path> {
+    public PathTypeDeserializer(Customization customization) {
+        super(Path.class, customization);
+    }
+    
+    @Override
+    protected Path deserialize(String jsonValue, Unmarshaller unmarshaller, Type rtType) {
+        return Paths.get(jsonValue);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/PathTypeSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/PathTypeSerializer.java
new file mode 100644
index 0000000..491ca13
--- /dev/null
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/PathTypeSerializer.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2020 IBM 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.nio.file.Path;
+
+import javax.json.stream.JsonGenerator;
+
+import org.eclipse.yasson.internal.Marshaller;
+import org.eclipse.yasson.internal.model.customization.Customization;
+
+public class PathTypeSerializer extends AbstractValueTypeSerializer<Path> {
+    public PathTypeSerializer(Customization customization) {
+        super(customization);
+    }
+
+    @Override
+    protected void serialize(Path obj, JsonGenerator generator, Marshaller marshaller) {
+        generator.write(obj.toString());
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/org/eclipse/yasson/defaultmapping/typeConvertors/DefaultSerializersTest.java b/src/test/java/org/eclipse/yasson/defaultmapping/typeConvertors/DefaultSerializersTest.java
index 20a4f83..4eb65cd 100644
--- a/src/test/java/org/eclipse/yasson/defaultmapping/typeConvertors/DefaultSerializersTest.java
+++ b/src/test/java/org/eclipse/yasson/defaultmapping/typeConvertors/DefaultSerializersTest.java
@@ -13,6 +13,7 @@
 package org.eclipse.yasson.defaultmapping.typeConvertors;
 
 import org.junit.jupiter.api.*;
+
 import static org.junit.jupiter.api.Assertions.*;
 import static org.eclipse.yasson.Jsonbs.*;
 
@@ -24,6 +25,10 @@
 import javax.json.bind.Jsonb;
 import javax.json.bind.JsonbConfig;
 import javax.json.bind.config.BinaryDataStrategy;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.Base64;
 import java.util.UUID;
 
@@ -108,7 +113,7 @@
         result = jsonb.fromJson(base64UrlEncodedJson, ByteArrayWrapper.class);
         assertArrayEquals(array, result.array);
     }
-
+    
     @Test
     public void testUUID() {
         UUID uuid = UUID.randomUUID();
@@ -116,4 +121,23 @@
         UUID result = defaultJsonb.fromJson(json, UUID.class);
         assertEquals(uuid, result);
     }
+    
+    @Test
+    public void serializeObjectWithPth() {
+        
+        Path expectedPath = Paths.get("/tmp/hello/me.txt");
+        String expectedPathString = expectedPath.toString().replace("\\", "\\\\");        
+        String expectedJson = "{\"path\":\"" + expectedPathString + "\"}";
+        final ObjectWithPath objectWithPath = new ObjectWithPath();
+        objectWithPath.path = expectedPath;
+        final String s = defaultJsonb.toJson(objectWithPath);
+        assertEquals(expectedJson, s);
+        
+        ObjectWithPath actualObject = defaultJsonb.fromJson(expectedJson, ObjectWithPath.class);
+        assertEquals(expectedPath, actualObject.path);
+    }
+    
+    public static class ObjectWithPath {
+        public Path path;
+    }
 }
diff --git a/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java b/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java
index 506497f..a8983e2 100644
--- a/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java
+++ b/src/test/java/org/eclipse/yasson/serializers/SerializersTest.java
@@ -41,6 +41,9 @@
 import javax.json.bind.config.PropertyOrderStrategy;
 import javax.json.bind.serializer.DeserializationContext;
 import javax.json.bind.serializer.JsonbDeserializer;
+import javax.json.bind.serializer.JsonbSerializer;
+import javax.json.bind.serializer.SerializationContext;
+import javax.json.stream.JsonGenerator;
 import javax.json.stream.JsonParser;
 
 import org.eclipse.yasson.TestTypeToken;
