diff --git a/core/lib/Drupal/Core/CoreBundle.php b/core/lib/Drupal/Core/CoreBundle.php
index a15279e..24c5ed4 100644
--- a/core/lib/Drupal/Core/CoreBundle.php
+++ b/core/lib/Drupal/Core/CoreBundle.php
@@ -11,7 +11,6 @@
 use Drupal\Core\DependencyInjection\Compiler\RegisterAccessChecksPass;
 use Drupal\Core\DependencyInjection\Compiler\RegisterMatchersPass;
 use Drupal\Core\DependencyInjection\Compiler\RegisterRouteFiltersPass;
-use Drupal\Core\DependencyInjection\Compiler\RegisterSerializationClassesPass;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\DependencyInjection\Reference;
@@ -249,20 +248,6 @@ public function build(ContainerBuilder $container) {
     $container
       ->register('transliteration', 'Drupal\Core\Transliteration\PHPTransliteration');
 
-    // Add Serializer with arguments to be replaced in the compiler pass.
-    $container->register('serializer', 'Symfony\Component\Serializer\Serializer')
-      ->addArgument(array())
-      ->addArgument(array());
-
-    $container->register('serializer.normalizer.complex_data', 'Drupal\Core\Serialization\ComplexDataNormalizer')->addTag('normalizer');
-    $container->register('serializer.normalizer.list', 'Drupal\Core\Serialization\ListNormalizer')->addTag('normalizer');
-    $container->register('serializer.normalizer.typed_data', 'Drupal\Core\Serialization\TypedDataNormalizer')->addTag('normalizer');
-
-    $container->register('serializer.encoder.json', 'Drupal\Core\Serialization\JsonEncoder')
-      ->addTag('encoder', array('format' => array('json' => 'JSON')));
-    $container->register('serializer.encoder.xml', 'Drupal\Core\Serialization\XmlEncoder')
-      ->addTag('encoder', array('format' => array('xml' => 'XML')));
-
     $container->register('flood', 'Drupal\Core\Flood\DatabaseBackend')
       ->addArgument(new Reference('database'));
 
@@ -270,8 +255,6 @@ public function build(ContainerBuilder $container) {
     $container->addCompilerPass(new RegisterRouteFiltersPass());
     // Add a compiler pass for registering event subscribers.
     $container->addCompilerPass(new RegisterKernelListenersPass(), PassConfig::TYPE_AFTER_REMOVING);
-    // Add a compiler pass for adding Normalizers and Encoders to Serializer.
-    $container->addCompilerPass(new RegisterSerializationClassesPass());
     // Add a compiler pass for registering event subscribers.
     $container->addCompilerPass(new RegisterKernelListenersPass(), PassConfig::TYPE_AFTER_REMOVING);
     $container->addCompilerPass(new RegisterAccessChecksPass());
diff --git a/core/modules/jsonld/jsonld.info b/core/modules/jsonld/jsonld.info
index fce4688..6e89779 100644
--- a/core/modules/jsonld/jsonld.info
+++ b/core/modules/jsonld/jsonld.info
@@ -4,3 +4,4 @@ package = Core
 version = VERSION
 core = 8.x
 dependencies[] = rdf
+dependencies[] = serialization
diff --git a/core/modules/rest/rest.info b/core/modules/rest/rest.info
index c0bf4bd..c450567 100644
--- a/core/modules/rest/rest.info
+++ b/core/modules/rest/rest.info
@@ -5,4 +5,5 @@ version = VERSION
 core = 8.x
 ; @todo Remove this dependency once hard coding to JSON-LD is gone.
 dependencies[] = jsonld
+dependencies[] = serialization
 configure = admin/config/services/rest
diff --git a/core/lib/Drupal/Core/Serialization/JsonEncoder.php b/core/modules/serialization/lib/Drupal/serialization/Encoder/JsonEncoder.php
similarity index 86%
rename from core/lib/Drupal/Core/Serialization/JsonEncoder.php
rename to core/modules/serialization/lib/Drupal/serialization/Encoder/JsonEncoder.php
index 8d7e3d7..35898a7 100644
--- a/core/lib/Drupal/Core/Serialization/JsonEncoder.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Encoder/JsonEncoder.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\Core\Serialization\JsonEncoder.
+ * Contains \Drupal\serialization\Encoder\JsonEncoder.
  */
 
-namespace Drupal\Core\Serialization;
+namespace Drupal\serialization\Encoder;
 
 use Symfony\Component\Serializer\Encoder\EncoderInterface;
 use Symfony\Component\Serializer\Encoder\JsonEncoder as BaseJsonEncoder;
diff --git a/core/lib/Drupal/Core/Serialization/XmlEncoder.php b/core/modules/serialization/lib/Drupal/serialization/Encoder/XmlEncoder.php
similarity index 95%
rename from core/lib/Drupal/Core/Serialization/XmlEncoder.php
rename to core/modules/serialization/lib/Drupal/serialization/Encoder/XmlEncoder.php
index d79a6d9..1f25389 100644
--- a/core/lib/Drupal/Core/Serialization/XmlEncoder.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Encoder/XmlEncoder.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains \Drupal\Core\Serialization\XmlEncoder.
+ * Contains \Drupal\serialization\Encoder\XmlEncoder.
  */
 
-namespace Drupal\Core\Serialization;
+namespace Drupal\serialization\Encoder;
 
 use Symfony\Component\Serializer\Encoder\EncoderInterface;
 use Symfony\Component\Serializer\Encoder\DecoderInterface;
diff --git a/core/lib/Drupal/Core/Serialization/ComplexDataNormalizer.php b/core/modules/serialization/lib/Drupal/serialization/Normalizer/ComplexDataNormalizer.php
similarity index 89%
rename from core/lib/Drupal/Core/Serialization/ComplexDataNormalizer.php
rename to core/modules/serialization/lib/Drupal/serialization/Normalizer/ComplexDataNormalizer.php
index 642352d..456cc0e 100644
--- a/core/lib/Drupal/Core/Serialization/ComplexDataNormalizer.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Normalizer/ComplexDataNormalizer.php
@@ -2,12 +2,11 @@
 
 /**
  * @file
- * Contains \Drupal\Core\Serialization\ComplexDataNormalizer.
+ * Contains \Drupal\serialization\Normalizer\ComplexDataNormalizer.
  */
 
-namespace Drupal\Core\Serialization;
+namespace Drupal\serialization\Normalizer;
 
-use Drupal\Core\Serialization\NormalizerBase;
 use Symfony\Component\Serializer\Exception\RuntimeException;
 
 /**
diff --git a/core/lib/Drupal/Core/Serialization/ListNormalizer.php b/core/modules/serialization/lib/Drupal/serialization/Normalizer/ListNormalizer.php
similarity index 88%
rename from core/lib/Drupal/Core/Serialization/ListNormalizer.php
rename to core/modules/serialization/lib/Drupal/serialization/Normalizer/ListNormalizer.php
index d590b7b..32c3f68 100644
--- a/core/lib/Drupal/Core/Serialization/ListNormalizer.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Normalizer/ListNormalizer.php
@@ -2,12 +2,11 @@
 
 /**
  * @file
- * Contains \Drupal\Core\Serialization\ListNormalizer.
+ * Contains \Drupal\serialization\Normalizer\ListNormalizer.
  */
 
-namespace Drupal\Core\Serialization;
+namespace Drupal\serialization\Normalizer;
 
-use Drupal\Core\Serialization\NormalizerBase;
 use Symfony\Component\Serializer\Exception\RuntimeException;
 
 /**
diff --git a/core/lib/Drupal/Core/Serialization/NormalizerBase.php b/core/modules/serialization/lib/Drupal/serialization/Normalizer/NormalizerBase.php
similarity index 85%
rename from core/lib/Drupal/Core/Serialization/NormalizerBase.php
rename to core/modules/serialization/lib/Drupal/serialization/Normalizer/NormalizerBase.php
index f256b0e..c30cd3e 100644
--- a/core/lib/Drupal/Core/Serialization/NormalizerBase.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Normalizer/NormalizerBase.php
@@ -2,12 +2,11 @@
 
 /**
  * @file
- * Contains Drupal\Core\Serialization\NormalizerBase.
+ * Contains \Drupal\serialization\Normalizer\NormalizerBase.
  */
 
-namespace Drupal\Core\Serialization;
+namespace Drupal\serialization\Normalizer;
 
-use Drupal\Core\Entity\EntityInterface;
 use Symfony\Component\Serializer\Exception\RuntimeException;
 use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
 use Symfony\Component\Serializer\Normalizer\SerializerAwareNormalizer;
diff --git a/core/lib/Drupal/Core/Serialization/TypedDataNormalizer.php b/core/modules/serialization/lib/Drupal/serialization/Normalizer/TypedDataNormalizer.php
similarity index 80%
rename from core/lib/Drupal/Core/Serialization/TypedDataNormalizer.php
rename to core/modules/serialization/lib/Drupal/serialization/Normalizer/TypedDataNormalizer.php
index cf2a879..38e9505 100644
--- a/core/lib/Drupal/Core/Serialization/TypedDataNormalizer.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Normalizer/TypedDataNormalizer.php
@@ -2,12 +2,11 @@
 
 /**
  * @file
- * Contains \Drupal\Core\Serialization\TypedDataNormalizer.
+ * Contains \Drupal\serialization\Normalizer\TypedDataNormalizer.
  */
 
-namespace Drupal\Core\Serialization;
+namespace Drupal\serialization\Normalizer;
 
-use Drupal\Core\Serialization\NormalizerBase;
 use Symfony\Component\Serializer\Exception\RuntimeException;
 
 /**
diff --git a/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterSerializationClassesPass.php b/core/modules/serialization/lib/Drupal/serialization/RegisterSerializationClassesCompilerPass.php
similarity index 92%
rename from core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterSerializationClassesPass.php
rename to core/modules/serialization/lib/Drupal/serialization/RegisterSerializationClassesCompilerPass.php
index bb5914d..e48af2e 100644
--- a/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterSerializationClassesPass.php
+++ b/core/modules/serialization/lib/Drupal/serialization/RegisterSerializationClassesCompilerPass.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Contains Drupal\serialization\RegisterSerializationClassesPass.
+ * Contains \Drupal\serialization\RegisterSerializationClassesCompilerPass.
  */
 
-namespace Drupal\Core\DependencyInjection\Compiler;
+namespace Drupal\serialization;
 
 use Symfony\Component\DependencyInjection\Reference;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -14,7 +14,7 @@
 /**
  * Adds services tagged 'normalizer' and 'encoder' to the Serializer.
  */
-class RegisterSerializationClassesPass implements CompilerPassInterface {
+class RegisterSerializationClassesCompilerPass implements CompilerPassInterface {
 
   /**
    * Adds services to the Serializer.
diff --git a/core/modules/serialization/lib/Drupal/serialization/SerializationBundle.php b/core/modules/serialization/lib/Drupal/serialization/SerializationBundle.php
new file mode 100644
index 0000000..a2744b5
--- /dev/null
+++ b/core/modules/serialization/lib/Drupal/serialization/SerializationBundle.php
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\serialization\SerializationBundle.
+ */
+
+namespace Drupal\serialization;
+
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\HttpKernel\Bundle\Bundle;
+
+/**
+ * Serialization dependency injection container.
+ */
+class SerializationBundle extends Bundle {
+
+  /**
+   * Overrides \Symfony\Component\HttpKernel\Bundle\Bundle::build().
+   */
+  public function build(ContainerBuilder $container) {
+    // Add Serializer with arguments to be replaced in the compiler pass.
+    $container->register('serializer', 'Symfony\Component\Serializer\Serializer')
+      ->addArgument(array())
+      ->addArgument(array());
+
+    $container->register('serializer.normalizer.complex_data', 'Drupal\serialization\Normalizer\ComplexDataNormalizer')->addTag('normalizer');
+    $container->register('serializer.normalizer.list', 'Drupal\serialization\Normalizer\ListNormalizer')->addTag('normalizer');
+    $container->register('serializer.normalizer.typed_data', 'Drupal\serialization\Normalizer\TypedDataNormalizer')->addTag('normalizer');
+
+    $container->register('serializer.encoder.json', 'Drupal\serialization\Encoder\JsonEncoder')
+      ->addTag('encoder', array('format' => array('json' => 'JSON')));
+    $container->register('serializer.encoder.xml', 'Drupal\serialization\Encoder\XmlEncoder')
+      ->addTag('encoder', array('format' => array('xml' => 'XML')));
+
+    // Add a compiler pass for adding Normalizers and Encoders to Serializer.
+    $container->addCompilerPass(new RegisterSerializationClassesCompilerPass());
+  }
+}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Serialization/EntitySerializationTest.php b/core/modules/serialization/lib/Drupal/serialization/Tests/EntitySerializationTest.php
similarity index 94%
rename from core/modules/system/lib/Drupal/system/Tests/Serialization/EntitySerializationTest.php
rename to core/modules/serialization/lib/Drupal/serialization/Tests/EntitySerializationTest.php
index 89fa5ce..d5dc025 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Serialization/EntitySerializationTest.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Tests/EntitySerializationTest.php
@@ -2,16 +2,16 @@
 
 /**
  * @file
- * Contains \Drupal\system\Tests\Serialization\EntitySerializationTest.
+ * Contains \Drupal\serialization\Tests\EntitySerializationTest.
  */
 
-namespace Drupal\system\Tests\Serialization;
+namespace Drupal\serialization\Tests;
 
+use Drupal\serialization\Encoder\JsonEncoder;
+use Drupal\serialization\Normalizer\ComplexDataNormalizer;
+use Drupal\serialization\Normalizer\TypedDataNormalizer;
 use Drupal\simpletest\WebTestBase;
 use Symfony\Component\Serializer\Serializer;
-use Drupal\Core\Serialization\JsonEncoder;
-use Drupal\Core\Serialization\ComplexDataNormalizer;
-use Drupal\Core\Serialization\TypedDataNormalizer;
 
 /**
  * Tests entity normalization and serialization of supported core formats.
@@ -23,7 +23,7 @@ class EntitySerializationTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('entity_test');
+  public static $modules = array('entity_test', 'serialization');
 
   /**
    * The test values.
diff --git a/core/modules/system/lib/Drupal/system/Tests/Serialization/SerializationTest.php b/core/modules/serialization/lib/Drupal/serialization/Tests/SerializationTest.php
similarity index 86%
rename from core/modules/system/lib/Drupal/system/Tests/Serialization/SerializationTest.php
rename to core/modules/serialization/lib/Drupal/serialization/Tests/SerializationTest.php
index 0a69208..e0c62cd 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Serialization/SerializationTest.php
+++ b/core/modules/serialization/lib/Drupal/serialization/Tests/SerializationTest.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\system\Tests\Serialization\SerializationTest.
+ * Contains \Drupal\serialization\Tests\SerializationTest.
  */
 
-namespace Drupal\system\Tests\Serialization;
+namespace Drupal\serialization\Tests;
 
 use Drupal\simpletest\WebTestBase;
 use Symfony\Component\Serializer\Exception\UnexpectedValueException;
@@ -17,12 +17,12 @@ class SerializationTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('serialization_test');
+  public static $modules = array('serialization', 'serialization_test');
 
   /**
    * The serializer service to test.
    *
-   * @var Symfony\Component\Serializer\SerializerInterface
+   * @var \Symfony\Component\Serializer\SerializerInterface
    */
   protected $serializer;
 
diff --git a/core/modules/serialization/serialization.info b/core/modules/serialization/serialization.info
new file mode 100644
index 0000000..9ae7649
--- /dev/null
+++ b/core/modules/serialization/serialization.info
@@ -0,0 +1,4 @@
+name = Serialization
+description = Provides a service for (de)serializing data to/from formats such as JSON and XML
+package = Core
+core = 8.x
diff --git a/core/modules/serialization/serialization.module b/core/modules/serialization/serialization.module
new file mode 100644
index 0000000..b3d9bbc
--- /dev/null
+++ b/core/modules/serialization/serialization.module
@@ -0,0 +1 @@
+<?php
diff --git a/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestBundle.php b/core/modules/serialization/tests/serialization_test/lib/Drupal/serialization_test/SerializationTestBundle.php
similarity index 87%
rename from core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestBundle.php
rename to core/modules/serialization/tests/serialization_test/lib/Drupal/serialization_test/SerializationTestBundle.php
index 83be4ff..ab9f0f1 100644
--- a/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestBundle.php
+++ b/core/modules/serialization/tests/serialization_test/lib/Drupal/serialization_test/SerializationTestBundle.php
@@ -2,14 +2,13 @@
 
 /**
  * @file
- * Definition of Drupal\serialization_test\SerializationTestBundle.
+ * Contains \Drupal\serialization_test\SerializationTestBundle.
  */
 
 namespace Drupal\serialization_test;
 
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\HttpKernel\Bundle\Bundle;
-use Symfony\Component\Serializer\Serializer;
 
 /**
  * SerializationTest dependency injection container.
diff --git a/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestEncoder.php b/core/modules/serialization/tests/serialization_test/lib/Drupal/serialization_test/SerializationTestEncoder.php
similarity index 56%
rename from core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestEncoder.php
rename to core/modules/serialization/tests/serialization_test/lib/Drupal/serialization_test/SerializationTestEncoder.php
index edb3b5b..7d15f30 100644
--- a/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestEncoder.php
+++ b/core/modules/serialization/tests/serialization_test/lib/Drupal/serialization_test/SerializationTestEncoder.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Definition of Drupal\serialization_test\SerializationTestEncoder.
+ * Contains \Drupal\serialization_test\SerializationTestEncoder.
  */
 
 namespace Drupal\serialization_test;
@@ -19,15 +19,7 @@ class SerializationTestEncoder implements EncoderInterface {
   static protected $format = 'serialization_test';
 
   /**
-   * Encodes data into the requested format.
-   *
-   * @param mixed $data
-   *   Data to encode.
-   * @param string $format
-   *   Format name.
-   *
-   * @return string
-   *   A string representation of $data in the requested format.
+   * Implements \Symfony\Component\Serializer\Encoder\EncoderInterface::encode().
    */
   public function encode($data, $format, array $context = array()) {
     // @see Drupal\serialization_test\SerializationTestNormalizer::normalize().
@@ -35,13 +27,7 @@ public function encode($data, $format, array $context = array()) {
   }
 
   /**
-   * Checks whether this encoder can encode to the requested format.
-   *
-   * @param string $format
-   *   The short name of the format.
-   *
-   * @return bool
-   *   Returns TRUE if this encoder can encode to the requested format.
+   * Implements \Symfony\Component\Serializer\Encoder\EncoderInterface::supportsEncoding().
    */
   public function supportsEncoding($format) {
     return static::$format === $format;
diff --git a/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestNormalizer.php b/core/modules/serialization/tests/serialization_test/lib/Drupal/serialization_test/SerializationTestNormalizer.php
similarity index 95%
rename from core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestNormalizer.php
rename to core/modules/serialization/tests/serialization_test/lib/Drupal/serialization_test/SerializationTestNormalizer.php
index 81478c5..8b5c4f7 100644
--- a/core/modules/system/tests/modules/serialization_test/lib/Drupal/serialization_test/SerializationTestNormalizer.php
+++ b/core/modules/serialization/tests/serialization_test/lib/Drupal/serialization_test/SerializationTestNormalizer.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Definition of Drupal\serialization_test\SerializationTestNormalizer.
+ * Contains \Drupal\serialization_test\SerializationTestNormalizer.
  */
 
 namespace Drupal\serialization_test;
diff --git a/core/modules/system/tests/modules/serialization_test/serialization_test.info b/core/modules/serialization/tests/serialization_test/serialization_test.info
similarity index 100%
rename from core/modules/system/tests/modules/serialization_test/serialization_test.info
rename to core/modules/serialization/tests/serialization_test/serialization_test.info
diff --git a/core/modules/system/tests/modules/serialization_test/serialization_test.module b/core/modules/serialization/tests/serialization_test/serialization_test.module
similarity index 100%
rename from core/modules/system/tests/modules/serialization_test/serialization_test.module
rename to core/modules/serialization/tests/serialization_test/serialization_test.module
