Чтобы ответить напрямую, вы можете использовать что-то вроде JSON.NET, чтобы сериализовать его в ASCII, а затем закодировать в base64.
Однако существуют очень реальные ограничения на количество данных, которые вы можете включить в строку запроса, и я не решусь это сделать.
Самое близкое, что я могу придумать, это создать GUID, использовать этот GUID в качестве ключа для сохранения объекта в Session, а затем передать RenderAction GUID. Это действие вытянет объект из сеанса, а затем удалит его из сеанса.
Быстрый псевдокод (не гарантируется даже компиляция, намного меньше работы)
var _requestKey = Guid.NewGuid();
Session[requestKey] = gridModel;
Тогда на другой стороне:
var gridModel = Session[requestKey] as GridModelType;
Session[requestKey] = null;