 .../config/install/serialization.settings.yml      | 11 -----
 .../config/schema/serialization.schema.yml         | 10 ----
 core/modules/serialization/serialization.install   | 57 ----------------------
 .../serialization/serialization.services.yml       |  9 +---
 .../src/EventSubscriber/BcConfigSubscriber.php     | 55 ---------------------
 .../RegisterSerializationClassesCompilerPass.php   | 18 -------
 .../tests/src/Kernel/EntitySerializationTest.php   | 13 +++--
 7 files changed, 10 insertions(+), 163 deletions(-)

diff --git a/core/modules/serialization/config/install/serialization.settings.yml b/core/modules/serialization/config/install/serialization.settings.yml
deleted file mode 100644
index a2758c2..0000000
--- a/core/modules/serialization/config/install/serialization.settings.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-# Before Drupal 8.3, typed data primitive values were normalized as strings, as
-# this was usually returned from database storage. A primitive data normalizer
-# has been introduced to get the casted value instead.
-bc_primitives_as_strings: false
-# Before Drupal 8.3, timestamps were always returned as Unix timestamps, which
-# are not a universal format for interchange. Now, RFC3339 timestamps are
-# returned. New Drupal installations opt out from this by default (hence this
-# is set to false), existing installations opt in to it.
-# @see serialization_update_8301()
-# @see https://www.drupal.org/node/2768651
-bc_timestamp_normalizer_unix: false
diff --git a/core/modules/serialization/config/schema/serialization.schema.yml b/core/modules/serialization/config/schema/serialization.schema.yml
deleted file mode 100644
index 1d44b3d..0000000
--- a/core/modules/serialization/config/schema/serialization.schema.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-serialization.settings:
-  type: config_object
-  label: 'Serialization settings'
-  mapping:
-    bc_primitives_as_strings:
-      type: boolean
-      label: 'Whether to retain pre Drupal 8.3 behavior of serializing all primitive items as strings.'
-    bc_timestamp_normalizer_unix:
-      type: boolean
-      label: 'Whether the pre Drupal 8.4 behavior of returning Unix timestamps instead of RFC3339 timestamps for TimestampItem fields is enabled or not.'
diff --git a/core/modules/serialization/serialization.install b/core/modules/serialization/serialization.install
deleted file mode 100644
index afc3311..0000000
--- a/core/modules/serialization/serialization.install
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-/**
- * @file
- * Update functions for the Serialization module.
- */
-
-/**
- * Implements hook_requirements().
- */
-function serialization_requirements($phase) {
-  $requirements = [];
-
-  if ($phase == 'runtime') {
-    $requirements['serialization_as_strings'] = [
-      'title' => t('Serialized data types'),
-      'severity' => REQUIREMENT_INFO,
-    ];
-
-    if (\Drupal::config('serialization.settings')->get('bc_primitives_as_strings')) {
-      $requirements['serialization_as_strings']['value'] = t('Enabled');
-      $requirements['serialization_as_strings']['description'] = t('The Serialization API is configured to output only string values for REST and other applications (instead of integers or Booleans when appropriate). <a href="https://www.drupal.org/node/2837696">Disabling this backwards compatibility mode</a> is recommended unless your sites or applications require string output.');
-    }
-    else {
-      $requirements['serialization_as_strings']['value'] = t('Not enabled');
-      $requirements['serialization_as_strings']['description'] = t('The Serialization API is configured with the recommended default and outputs typed values (integers, Booleans, or strings as appropriate) for REST and other applications. If your site or applications require string output, you can <a href="https://www.drupal.org/node/2837696">enable backwards compatibility mode</a>.');
-    }
-  }
-
-  return $requirements;
-}
-
-/**
- * @see hal_update_8301()
- */
-function serialization_update_8301() {}
-
-/**
- * Add serialization.settings::bc_primitives_as_strings configuration.
- */
-function serialization_update_8302() {
-  $config_factory = \Drupal::configFactory();
-  $config_factory->getEditable('serialization.settings')
-    ->set('bc_primitives_as_strings', FALSE)
-    ->save(TRUE);
-
-  return t('The REST API will no longer output all values as strings. Integers/booleans will be used where appropriate. If your site depends on these value being strings, <a href="https://www.drupal.org/node/2837696">read the change record to learn how to enable the BC mode.</a>');
-}
-
-/**
- * Enable BC for timestamp formatting: continue to return UNIX timestamps.
- */
-function serialization_update_8401() {
-  $config_factory = \Drupal::configFactory();
-  $serialization_settings = $config_factory->getEditable('serialization.settings');
-  $serialization_settings->set('bc_timestamp_normalizer_unix', TRUE)->save(TRUE);
-}
diff --git a/core/modules/serialization/serialization.services.yml b/core/modules/serialization/serialization.services.yml
index dca6094..30e2522 100644
--- a/core/modules/serialization/serialization.services.yml
+++ b/core/modules/serialization/serialization.services.yml
@@ -20,7 +20,7 @@ services:
   serializer.normalizer.primitive_data:
     class: Drupal\serialization\Normalizer\PrimitiveDataNormalizer
     tags:
-      - { name: normalizer, priority: 5, bc: bc_primitives_as_strings, bc_config_name: 'serialization.settings' }
+      - { name: normalizer, priority: 5 }
   serializer.normalizer.complex_data:
     class: Drupal\serialization\Normalizer\ComplexDataNormalizer
     tags:
@@ -57,7 +57,7 @@ services:
     tags:
       # Priority must be higher than serializer.normalizer.field_item and lower
       # than hal normalizers.
-      - { name: normalizer, priority: 8, bc: bc_timestamp_normalizer_unix, bc_config_name: 'serialization.settings' }
+      - { name: normalizer, priority: 8 }
   serializer.normalizer.password_field_item:
       class: Drupal\serialization\Normalizer\NullNormalizer
       arguments: ['Drupal\Core\Field\Plugin\Field\FieldType\PasswordItem']
@@ -100,8 +100,3 @@ services:
     tags:
       - { name: event_subscriber }
     arguments: ['%serializer.formats%']
-  serialization.bc_config_subscriber:
-    class: Drupal\serialization\EventSubscriber\BcConfigSubscriber
-    tags:
-      - { name: event_subscriber }
-    arguments: ['@kernel']
diff --git a/core/modules/serialization/src/EventSubscriber/BcConfigSubscriber.php b/core/modules/serialization/src/EventSubscriber/BcConfigSubscriber.php
deleted file mode 100644
index 4cb794f..0000000
--- a/core/modules/serialization/src/EventSubscriber/BcConfigSubscriber.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-namespace Drupal\serialization\EventSubscriber;
-
-use Drupal\Core\Config\ConfigCrudEvent;
-use Drupal\Core\Config\ConfigEvents;
-use Drupal\Core\DrupalKernelInterface;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-
-/**
- * Config event subscriber to rebuild the container when BC config is saved.
- */
-class BcConfigSubscriber implements EventSubscriberInterface {
-
-  /**
-   * The Drupal Kernel.
-   *
-   * @var \Drupal\Core\DrupalKernelInterface
-   */
-  protected $kernel;
-
-  /**
-   * BcConfigSubscriber constructor.
-   *
-   * @param \Drupal\Core\DrupalKernelInterface $kernel
-   *   The Drupal Kernel.
-   */
-  public function __construct(DrupalKernelInterface $kernel) {
-    $this->kernel = $kernel;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function getSubscribedEvents() {
-    $events[ConfigEvents::SAVE][] = 'onConfigSave';
-    return $events;
-  }
-
-  /**
-   * Invalidates the service container if serialization BC config gets updated.
-   *
-   * @param \Drupal\Core\Config\ConfigCrudEvent $event
-   */
-  public function onConfigSave(ConfigCrudEvent $event) {
-    $saved_config = $event->getConfig();
-
-    if ($saved_config->getName() === 'serialization.settings') {
-      if ($event->isChanged('bc_primitives_as_strings') || $event->isChanged('bc_timestamp_normalizer_unix')) {
-        $this->kernel->invalidateContainer();
-      }
-    }
-  }
-
-}
diff --git a/core/modules/serialization/src/RegisterSerializationClassesCompilerPass.php b/core/modules/serialization/src/RegisterSerializationClassesCompilerPass.php
index 10474d1..f2fd54a 100644
--- a/core/modules/serialization/src/RegisterSerializationClassesCompilerPass.php
+++ b/core/modules/serialization/src/RegisterSerializationClassesCompilerPass.php
@@ -23,12 +23,6 @@ public function process(ContainerBuilder $container) {
 
     // Retrieve registered Normalizers and Encoders from the container.
     foreach ($container->findTaggedServiceIds('normalizer') as $id => $attributes) {
-      // If there is a BC key present, pass this to determine if the normalizer
-      // should be skipped.
-      if (isset($attributes[0]['bc']) && $this->normalizerBcSettingIsEnabled($attributes[0]['bc'], $attributes[0]['bc_config_name'])) {
-        continue;
-      }
-
       $priority = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
       $normalizers[$priority][] = new Reference($id);
     }
@@ -61,18 +55,6 @@ public function process(ContainerBuilder $container) {
   }
 
   /**
-   * Returns whether a normalizer BC setting is disabled or not.
-   *
-   * @param string $key
-   *
-   * @return bool
-   */
-  protected function normalizerBcSettingIsEnabled($key, $config_name) {
-    $settings = BootstrapConfigStorageFactory::get()->read($config_name);
-    return !empty($settings[$key]);
-  }
-
-  /**
    * Sorts by priority.
    *
    * Order services from highest priority number to lowest (reverse sorting).
diff --git a/core/modules/serialization/tests/src/Kernel/EntitySerializationTest.php b/core/modules/serialization/tests/src/Kernel/EntitySerializationTest.php
index ebd4e03..560dcbd 100644
--- a/core/modules/serialization/tests/src/Kernel/EntitySerializationTest.php
+++ b/core/modules/serialization/tests/src/Kernel/EntitySerializationTest.php
@@ -4,7 +4,6 @@
 
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\entity_test\Entity\EntityTestMulRev;
-use Drupal\Tests\rest\Functional\BcTimestampNormalizerUnixTestTrait;
 
 /**
  * Tests that entities can be serialized to supported core formats.
@@ -13,8 +12,6 @@
  */
 class EntitySerializationTest extends NormalizerTestBase {
 
-  use BcTimestampNormalizerUnixTestTrait;
-
   /**
    * Modules to install.
    *
@@ -109,7 +106,10 @@ public function testNormalize() {
         ['value' => 'entity_test_mulrev'],
       ],
       'created' => [
-        $this->formatExpectedTimestampItemValues($this->entity->created->value),
+        [
+          'value' => (new \DateTime())->setTimestamp($this->entity->created->value)->setTimezone(new \DateTimeZone('UTC'))->format(\DateTime::RFC3339),
+          'format' => \DateTime::RFC3339,
+        ],
       ],
       'user_id' => [
         [
@@ -185,7 +185,10 @@ public function testSerialize() {
 
     // Generate the expected xml in a way that allows changes to entity property
     // order.
-    $expected_created = $this->formatExpectedTimestampItemValues($this->entity->created->value);
+    $expected_created =         [
+      'value' => (new \DateTime())->setTimestamp($this->entity->created->value)->setTimezone(new \DateTimeZone('UTC'))->format(\DateTime::RFC3339),
+      'format' => \DateTime::RFC3339,
+    ];
 
     $expected = [
       'id' => '<id><value>' . $this->entity->id() . '</value></id>',
