 jsonapi.services.yml                     |  2 +-
 src/EntityToJsonApi.php                  | 79 ++++++--------------------------
 tests/src/Kernel/EntityToJsonApiTest.php |  3 ++
 3 files changed, 18 insertions(+), 66 deletions(-)

diff --git a/jsonapi.services.yml b/jsonapi.services.yml
index 3327db1..0dc5f88 100644
--- a/jsonapi.services.yml
+++ b/jsonapi.services.yml
@@ -131,7 +131,7 @@ services:
 
   jsonapi.entity.to_jsonapi:
     class: Drupal\jsonapi\EntityToJsonApi
-    arguments: ['@jsonapi.serializer_do_not_use_removal_imminent', '@jsonapi.resource_type.repository', '@current_user']
+    arguments: ['@http_kernel']
 
   logger.channel.jsonapi:
     parent: logger.channel_base
diff --git a/src/EntityToJsonApi.php b/src/EntityToJsonApi.php
index 09f97be..f54fbab 100644
--- a/src/EntityToJsonApi.php
+++ b/src/EntityToJsonApi.php
@@ -2,13 +2,10 @@
 
 namespace Drupal\jsonapi;
 
+use Drupal\Component\Serialization\Json;
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Session\AccountInterface;
-use Drupal\Core\Cache\CacheableMetadata;
-use Drupal\jsonapi\Resource\JsonApiDocumentTopLevel;
-use Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface;
-use Drupal\jsonapi\Serializer\Serializer;
 use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
 
 /**
  * Simplifies the process of generating a JSON API version of an entity.
@@ -18,40 +15,20 @@ use Symfony\Component\HttpFoundation\Request;
 class EntityToJsonApi {
 
   /**
-   * The currently logged in user.
+   * The HTTP kernel.
    *
-   * @var \Drupal\Core\Session\AccountInterface
+   * @var \Symfony\Component\HttpKernel\HttpKernelInterface
    */
-  protected $currentUser;
-
-  /**
-   * Serializer object.
-   *
-   * @var \Drupal\jsonapi\Serializer\Serializer
-   */
-  protected $serializer;
-
-  /**
-   * The JSON API resource type repository.
-   *
-   * @var \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface
-   */
-  protected $resourceTypeRepository;
+  protected $httpKernel;
 
   /**
    * EntityToJsonApi constructor.
    *
-   * @param \Drupal\jsonapi\Serializer\Serializer $serializer
-   *   The serializer.
-   * @param \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface $resource_type_repository
-   *   The resource type repository.
-   * @param \Drupal\Core\Session\AccountInterface $current_user
-   *   The currently logged in user.
+   * @param \Symfony\Component\HttpKernel\HttpKernelInterface
+   *   The HTTP kernel.
    */
-  public function __construct(Serializer $serializer, ResourceTypeRepositoryInterface $resource_type_repository, AccountInterface $current_user) {
-    $this->serializer = $serializer;
-    $this->resourceTypeRepository = $resource_type_repository;
-    $this->currentUser = $current_user;
+  public function __construct(HttpKernelInterface $http_kernel) {
+    $this->httpKernel = $http_kernel;
   }
 
   /**
@@ -64,11 +41,10 @@ class EntityToJsonApi {
    *   The raw JSON string of the requested resource.
    */
   public function serialize(EntityInterface $entity) {
-    // TODO: Supporting includes requires adding the 'include' query string.
-    return $this->serializer->serialize(new JsonApiDocumentTopLevel($entity),
-      'api_json',
-      $this->calculateContext($entity)
-    );
+    $path = sprintf('/jsonapi/%s/%s/%s', $entity->getEntityTypeId(), $entity->bundle(), $entity->uuid());
+    $request = Request::create($path, 'GET', ['_format' => 'api_json']);
+    $response = $this->httpKernel->handle($request, HttpKernelInterface::SUB_REQUEST, TRUE);
+    return $response->getContent();
   }
 
   /**
@@ -81,34 +57,7 @@ class EntityToJsonApi {
    *   The JSON structure of the requested resource.
    */
   public function normalize(EntityInterface $entity) {
-    return $this->serializer->normalize(new JsonApiDocumentTopLevel($entity),
-      'api_json',
-      $this->calculateContext($entity)
-    );
-  }
-
-  /**
-   * Calculate the context for the serialize/normalize operation.
-   *
-   * @param \Drupal\Core\Entity\EntityInterface $entity
-   *   The entity to generate the JSON from.
-   *
-   * @return array
-   *   The context.
-   */
-  protected function calculateContext(EntityInterface $entity) {
-    // TODO: Supporting includes requires adding the 'include' query string.
-    $path = sprintf('/jsonapi/%s/%s/%s', $entity->getEntityTypeId(), $entity->bundle(), $entity->uuid());
-    $request = Request::create($path, 'GET');
-    return [
-      'account' => $this->currentUser,
-      'cacheable_metadata' => new CacheableMetadata(),
-      'resource_type' => $this->resourceTypeRepository->get(
-        $entity->getEntityTypeId(),
-        $entity->bundle()
-      ),
-      'request' => $request,
-    ];
+    return Json::decode($this->serialize($entity));
   }
 
 }
diff --git a/tests/src/Kernel/EntityToJsonApiTest.php b/tests/src/Kernel/EntityToJsonApiTest.php
index 6bc0260..c8b9644 100644
--- a/tests/src/Kernel/EntityToJsonApiTest.php
+++ b/tests/src/Kernel/EntityToJsonApiTest.php
@@ -152,6 +152,9 @@ class EntityToJsonApiTest extends JsonapiKernelTestBase {
       'id' => RoleInterface::ANONYMOUS_ID,
       'permissions' => [
         'access content',
+        'administer users',
+        'access taxonomy overview',
+        'administer permissions',
       ],
     ]);
     $this->role->save();
