diff --git a/core/lib/Drupal/Core/TempStore/SharedTempStore.php b/core/lib/Drupal/Core/TempStore/SharedTempStore.php
index 2555e22ca88d485aa918401e76d911cb7f49d7ec..6bc0340752758cea5448597f36ca1770d945daf5 100644
--- a/core/lib/Drupal/Core/TempStore/SharedTempStore.php
+++ b/core/lib/Drupal/Core/TempStore/SharedTempStore.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Core\TempStore;
 
+use Drupal\Core\DependencyInjection\DependencySerializationTrait;
 use Drupal\Core\KeyValueStore\KeyValueStoreExpirableInterface;
 use Drupal\Core\Lock\LockBackendInterface;
 use Symfony\Component\HttpFoundation\RequestStack;
@@ -37,6 +38,8 @@
  */
 class SharedTempStore {
 
+  use DependencySerializationTrait;
+
   /**
    * The key/value storage object used for this data.
    *
diff --git a/core/tests/Drupal/Tests/Core/TempStore/SharedTempStoreTest.php b/core/tests/Drupal/Tests/Core/TempStore/SharedTempStoreTest.php
index f37ddbb956269b1fccb7e607e622cc0db572e799..fccb432f8f7a3777600bf944fbb8aa4f5919501c 100644
--- a/core/tests/Drupal/Tests/Core/TempStore/SharedTempStoreTest.php
+++ b/core/tests/Drupal/Tests/Core/TempStore/SharedTempStoreTest.php
@@ -6,6 +6,7 @@
 use Drupal\Tests\UnitTestCase;
 use Drupal\Core\TempStore\SharedTempStore;
 use Drupal\Core\TempStore\TempStoreException;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\RequestStack;
 
@@ -382,4 +383,32 @@ public function testDeleteIfOwner() {
     $this->assertFalse($this->tempStore->deleteIfOwner('test_3'));
   }
 
+  /**
+   * Tests the serialization of a shared temp store.
+   */
+  public function testSerialization() {
+    // Add an unserializable request to the request stack. If the tempstore
+    // didn't use DependencySerializationTrait, the exception would be thrown
+    // when we try to serialize the tempstore.
+    $request = $this->prophesize(Request::class);
+    $request->willImplement('\Serializable');
+    $request->serialize()->willThrow(new \LogicException('Oops!'));
+    $unserializable_request = $request->reveal();
+
+    $this->requestStack->push($unserializable_request);
+    $this->requestStack->_serviceId = 'request_stack';
+
+    $container = $this->prophesize(ContainerInterface::class);
+    $container->get('request_stack')->willReturn($this->requestStack);
+    $container->has('request_stack')->willReturn(TRUE);
+    \Drupal::setContainer($container->reveal());
+
+    $store = unserialize(serialize($this->tempStore));
+    $this->assertInstanceOf(SharedTempStore::class, $store);
+
+    $request_stack = $this->getObjectAttribute($store, 'requestStack');
+    $this->assertEquals($this->requestStack, $request_stack);
+    $this->assertSame($unserializable_request, $request_stack->pop());
+  }
+
 }