Estoy desarrollando una aplicación web donde el backend es una API web REST escrita en ASP.net Core 5
y la interfaz es una aplicación Angular
escrita en TypeScript
.
Una de mis API de back-end de ASP.net devuelve una instancia de este objeto C#:
public class MyClass { DateTime expires {get; set;} string ticket {get; set;} }
En mi aplicación Angular, llamo a esta API con el HTTP Client
de Angular y deserializo el resultado como una instancia de la siguiente clase de TypeScript:
export class MyClass { expires: Date; ticket: string; }
Sin embargo, esto no funciona correctamente porque si inspecciono el objeto TypeScript una vez que se ha devuelto, puedo ver que el campo expires
en realidad contiene una string
, no un objeto Fecha.
Me imagino que esto sucede porque los datos viajan entre el backend y el frontend en formato JSON, que no admite tipos pero solo conoce cadenas y números, por lo que el objeto DateTime de C# se convierte en una cadena.
Mi pregunta es: ¿cuál es la mejor manera de manejar este problema? Me gustaría mantener mis objetos fuertemente tipados si es posible... ¿hay alguna configuración que pueda hacer en el lado ASP.net y/o Angular para que este tipo de serialización funcione automáticamente? O si no, ¿cuál es el siguiente mejor enfoque?
Esta es la solución que armé a partir de las respuestas sugeridas en los comentarios:
return this.http.get<MyClass>(restUrl, { observe: 'response' }) .pipe(map(response => { if (response.ok) { response.body.expires = new Date(response.body.expires); this.setLoginResult(response.body); } return response; }));