diff --git a/core/modules/rest/src/RequestHandler.php b/core/modules/rest/src/RequestHandler.php
index 5a04cd8..0cdcf70 100644
--- a/core/modules/rest/src/RequestHandler.php
+++ b/core/modules/rest/src/RequestHandler.php
@@ -59,9 +59,15 @@ public function handle(RouteMatchInterface $route_match, Request $request) {
       $method_settings = $config[$plugin][$request->getMethod()];
       if (empty($method_settings['supported_formats']) || in_array($format, $method_settings['supported_formats'])) {
         $definition = $resource->getPluginDefinition();
-        $class = $definition['serialization_class'];
         try {
-          $unserialized = $serializer->deserialize($received, $class, $format, array('request_method' => $method));
+          if (!empty($definition['serialization_class'])) {
+            $unserialized = $serializer->deserialize($received, $definition['serialization_class'], $format, array('request_method' => $method));
+          }
+          // If the plugin does not specify a serialization class just decode the received data.
+          // Example: received JSON is decoded into a PHP array.
+          else {
+            $unserialized = $serializer->decode($received, $format, array('request_method' => $method));
+          }
         }
         catch (UnexpectedValueException $e) {
           $error['error'] = $e->getMessage();
diff --git a/core/modules/rest/src/Tests/ResourceTest.php b/core/modules/rest/src/Tests/ResourceTest.php
index f699a4b..3f3cb93 100644
--- a/core/modules/rest/src/Tests/ResourceTest.php
+++ b/core/modules/rest/src/Tests/ResourceTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\rest\Tests;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\user\Entity\Role;
+use Drupal\user\RoleInterface;
 
 /**
  * Tests the structure of a REST resource.
@@ -21,7 +22,7 @@ class ResourceTest extends RESTTestBase {
    *
    * @var array
    */
-  public static $modules = array('hal', 'rest', 'entity_test');
+  public static $modules = array('hal', 'rest', 'entity_test', 'rest_test');
 
   /**
    * The entity.
@@ -106,4 +107,37 @@ public function testAuthentication() {
     $this->curlClose();
   }
 
+  /**
+   * Tests that we must decode instead of deserialize when a serialization class
+   * is not needed.
+   */
+  public function testSerializationClassNotNeeded() {
+    // Enabling the service.
+    $settings = [];
+    $resources = [
+      ['type' => 'serialization_test', 'method' => 'POST'],
+    ];
+    $format = 'json';
+    $auth = $this->defaultAuth;
+    foreach ($resources as $resource) {
+      $settings[$resource['type']][$resource['method']]['supported_formats'][] = $format;
+      $settings[$resource['type']][$resource['method']]['supported_auth'] = $auth;
+      $this->config->set('resources', $settings);
+      $this->config->save();
+    }
+    $this->rebuildCache();
+
+    // Add permission to anonymous user.
+    Role::load(RoleInterface::ANONYMOUS_ID)
+      ->grantPermission('restful post serialization_test')
+      ->save();
+
+    // Create a JSON.
+    $serialized = $this->container->get('serializer')->serialize(['foo'], 'hal_json');
+    // Post to the REST service to verify that the result is correct.
+    $this->httpRequest('serialization_test', 'POST', $serialized, 'application/json');
+    $this->assertResponse('200', 'HTTP response code is correct.');
+    $this->assertResponseBody('"foo"', 'The Response Body is correct.');
+  }
+
 }
diff --git a/core/modules/rest/tests/modules/rest_test/rest_test.info.yml b/core/modules/rest/tests/modules/rest_test/rest_test.info.yml
index b5f4966..e10b226 100644
--- a/core/modules/rest/tests/modules/rest_test/rest_test.info.yml
+++ b/core/modules/rest/tests/modules/rest_test/rest_test.info.yml
@@ -1,6 +1,6 @@
 name: 'REST test'
 type: module
-description: 'Provides test hooks for REST module.'
+description: 'Provides test hooks and resources for REST module.'
 package: Testing
 version: VERSION
 core: 8.x
diff --git a/core/modules/rest/tests/modules/rest_test/src/Plugin/rest/resource/SerializationClassTestResource.php b/core/modules/rest/tests/modules/rest_test/src/Plugin/rest/resource/SerializationClassTestResource.php
new file mode 100644
index 0000000..4a24e0e
--- /dev/null
+++ b/core/modules/rest/tests/modules/rest_test/src/Plugin/rest/resource/SerializationClassTestResource.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\rest_test\Plugin\rest\resource\SerializationClassTestResource.
+ */
+
+namespace Drupal\rest_test\Plugin\rest\resource;
+
+use Drupal\rest\Plugin\ResourceBase;
+use Drupal\rest\ResourceResponse;
+
+/**
+ * Class used to test that a REST resource don't need a serialization class.
+ *
+ * @RestResource(
+ *   id = "serialization_test",
+ *   label = @Translation("Serialization Class Not Needed"),
+ *   serialization_class = ""
+ * )
+ */
+class SerializationClassTestResource extends ResourceBase {
+
+  /**
+   * Responds to serialization test POST request.
+   *
+   * @param array $array
+   *   An array with test information.
+   *
+   *
+   * @return \Drupal\rest\ResourceResponse
+   */
+  public function post(array $array = []) {
+    return new ResourceResponse($array[0], 200, []);
+  }
+
+}
\ No newline at end of file
