diff --git a/core/lib/Drupal/Core/CoreBundle.php b/core/lib/Drupal/Core/CoreBundle.php
index 52af901..a678006 100644
--- a/core/lib/Drupal/Core/CoreBundle.php
+++ b/core/lib/Drupal/Core/CoreBundle.php
@@ -236,6 +236,7 @@ public function build(ContainerBuilder $container) {
     $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');
+    $container->register('serializer.encoder.xml', 'Drupal\Core\Serialization\XmlEncoder')->addTag('encoder');
 
     $container->register('flood', 'Drupal\Core\Flood\DatabaseBackend')
       ->addArgument(new Reference('database'));
diff --git a/core/lib/Drupal/Core/Serialization/XmlEncoder.php b/core/lib/Drupal/Core/Serialization/XmlEncoder.php
new file mode 100644
index 0000000..7235af3
--- /dev/null
+++ b/core/lib/Drupal/Core/Serialization/XmlEncoder.php
@@ -0,0 +1,72 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Serialization\XmlEncoder.
+ */
+
+namespace Drupal\Core\Serialization;
+
+use Symfony\Component\Serializer\Encoder\EncoderInterface;
+use Symfony\Component\Serializer\Encoder\DecoderInterface;
+use Symfony\Component\Serializer\Encoder\SerializerAwareEncoder;
+use Symfony\Component\Serializer\Encoder\XmlEncoder as BaseXmlEncoder;
+
+/**
+ * Adds XML support for serializer.
+ *
+ * This acts as a wrapper class for Symfony's XmlEncoder so that it is not
+ * implementing NormalizationAwareInterface, and can be normalized externally.
+ */
+class XmlEncoder extends SerializerAwareEncoder implements EncoderInterface, DecoderInterface {
+
+  /**
+   * The formats that this Encoder supports.
+   *
+   * @var array
+   */
+  static protected $format = array('xml');
+
+  /**
+   * An instance of the Symfony XmlEncoder to perform the actual encoding.
+   *
+   * @var \Symfony\Component\Serializer\Encoder\XmlEncoder
+   */
+  protected $baseEncoder;
+
+  /**
+   * Constucts the XmlEncoder object, creating a BaseXmlEncoder class also.
+   */
+  public function __construct() {
+    $this->baseEncoder = new BaseXmlEncoder();
+  }
+
+  /**
+   * Implements \Symfony\Component\Serializer\Encoder\EncoderInterface::encode().
+   */
+  public function encode($data, $format){
+    $normalized = $this->serializer->normalize($data, $format);
+    return $this->baseEncoder->encode($normalized, $format);
+  }
+
+  /**
+   * Implements \Symfony\Component\Serializer\Encoder\JsonEncoder::supportsEncoding().
+   */
+  public function supportsEncoding($format) {
+    return in_array($format, static::$format);
+  }
+
+  /**
+   * Implements \Symfony\Component\Serializer\Encoder\EncoderInterface::decode().
+   */
+  public function decode($data, $format){
+    return $this->baseEncoder->decode($data, $format);
+  }
+
+  /**
+   * Implements \Symfony\Component\Serializer\Encoder\JsonEncoder::supportsDecoding().
+   */
+  public function supportsDecoding($format) {
+    return in_array($format, static::$format);
+  }
+}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Serialization/EntitySerializationTest.php b/core/modules/system/lib/Drupal/system/Tests/Serialization/EntitySerializationTest.php
index f34cd9d..8696fea 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Serialization/EntitySerializationTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Serialization/EntitySerializationTest.php
@@ -10,6 +10,7 @@
 use Drupal\simpletest\WebTestBase;
 use Symfony\Component\Serializer\Serializer;
 use Drupal\Core\Serialization\JsonEncoder;
+use Symfony\Component\Serializer\Encoder\XmlEncoder as BaseXmlEncoder;
 use Drupal\Core\Serialization\ComplexDataNormalizer;
 use Drupal\Core\Serialization\TypedDataNormalizer;
 
@@ -120,9 +121,21 @@ public function testSerialize() {
     $expected = json_encode($normalized);
     // Test 'json'.
     $actual = $serializer->serialize($this->entity, 'json');
-    $this->assertIdentical($actual, $expected, 'Entity serializes to JSON when json is requested.');
+    $this->assertIdentical($actual, $expected, 'Entity serializes to JSON when "json" is requested.');
+    $actual = $serializer->serialize($normalized, 'json');
+    $this->assertIdentical($actual, $expected, 'A normalized array serializes to JSON when "json" is requested');
     // Test 'ajax'.
     $actual = $serializer->serialize($this->entity, 'ajax');
-    $this->assertIdentical($actual, $expected, 'Entity serializes to JSON when ajax is requested.');
+    $this->assertIdentical($actual, $expected, 'Entity serializes to JSON when "ajax" is requested.');
+    $actual = $serializer->serialize($normalized, 'ajax');
+    $this->assertIdentical($actual, $expected, 'A normalized array serializes to JSON when "ajax" is requested');
+    // Test 'xml'. The expected output should match that of Symfony's XmlEncoder.
+    $expected ='<?xml version="1.0"?>
+<response><id><value>1</value></id><revision_id><value>1</value></revision_id><uuid><value>' . $this->entity->uuid() . '</value></uuid><langcode><value>und</value></langcode><default_langcode><value/></default_langcode><name><value>' . $this->values['name'] . '</value></name><user_id><value>1</value></user_id><field_test_text><value>' . $this->values['field_test_text']['value'] . '</value><format>full_html</format></field_test_text></response>
+';
+    $actual = $serializer->serialize($this->entity, 'xml');
+    $this->assertIdentical($actual, $expected, 'Entity serializes to XML when "xml" is requested.');
+    $actual = $serializer->serialize($normalized, 'xml');
+    $this->assertIdentical($actual, $expected, 'A normalized array serializes to XML when "xml" is requested');
   }
 }
