Метод $.serialize приводит данные полей формы в query string формат. Свойство data ожидает передачц объекта. Ничего не надо в JSON конвертировать - это дичь, все что нужно нормально передать объект. Для этого есть куча реализаций, вот накидал простой пример:
https://codepen.io/kpeatubho/pen/oEPrBm (метод $.serializeObject) в итоге в переменной data у нас нормальный объект, передавая который, можно нормально работать с POST данными.