Armazenar objeto complexo no TempData

Eu tenho tentado passar dados para uma ação após um redirecionamento usando TempData da seguinte forma:

if (!ModelState.IsValid)
{
    TempData["ErrorMessages"] = ModelState;
    return RedirectToAction("Product", "ProductDetails", new { code = model.ProductCode });
}

mas infelizmente está falhando com a seguinte mensagem:

'System.InvalidOperationException oMicrosoft.AspNet.Mvc.SessionStateTempDataProvider' não pode serializar um objeto do tipo'ModelStateDictionary' ao estado da sessão ".

Encontrei um problema emo projeto MVC no Github, mas, embora explique por que estou recebendo esse erro, não vejo o que seria uma alternativa viável.

Uma opção seria serializar o objeto em uma string json e desserializá-lo novamente e reconstruir oModelState. Essa é a melhor abordagem? Há algum problema de desempenho em potencial que eu precise levar em consideração?

E, finalmente, existem alternativas para serializar objetos complexos ou usar algum outro padrão que não envolva o uso deTempData?