¿La polilínea completa?, ¿con todos sus vértices?.
Poco recomendable por que imagino que cada polilínea ocupará un espacio considerable.
En la versión v2 tienes el método getPolyline() de la clase
GDirections que te permite obtenerlo.
Pero te doy dos razones por las que no te recomiendo hacerlo.
La razón informática: Si has hecho la migración a la versión 3 imagino que una vez determinada la ruta puedes obtener el array de puntos intermedios mediante la propiedad waypoints del servicio
DirectionsService. Pero los puntos existentes en cualquier ruta serán muchísimos y superarán la capacidad de los campos de tu BBDD independientemente que los guardes como strings, arrays o formatos XML.
La razón Cartográfica: Por cuestiones de resolución de pantalla, el nivel de detalle que uses en cada zoom del mapa será distinto y con cada nivel de detalle se usará una polilínea distinta. Es decir que si almacenas dicha polilínea en la BBDD se almacenará a un zoom determinado, pero en cuanto mueva el usuario el zoom, ya no te va a encajar la polilínea.
Entonces, la solución que yo te daría es que almacenes solo las coordenadas del punto inicial y final de la polilínea en la BBDD y luego construyes con ellas los objeto GLatLng necesarios para cargar las rutas.