Estoy recibiendo una fecha JSON en el siguiente formato :
"launch_date": 1250553600
¿Cómo debo modificar lo siguiente para incluir un analizador DateTime personalizado que me permita convertir ese número en un objeto DateTime
?
JsonConvert.DeserializeObject(json); public sealed class NTask { public DateTime launch_date { get; set; } }
Alternativamente, podría usar long
y luego analizarlo en otro campo, pero preferiría evitar hacerlo y hacer que JsonConvert
lo JsonConvert
automáticamente a DateTime a través de algún convertidor.
Vas a querer usar un JSONConverter para ayudar a gestionar la traducción. Ver esta respuesta stackapps para más detalles.
Aquí hay un código para hacer eso:
// This is an example of a UNIX timestamp for the date/time 11-04-2005 09:25. double timestamp = 1113211532; // First make a System.DateTime equivalent to the UNIX Epoch. System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); // Add the number of seconds in UNIX timestamp to be converted. dateTime = dateTime.AddSeconds(timestamp);
Para su código:
JsonConvert.DeserializeObject(json); public sealed class NTask { public DateTime launch_date { get; set; } public void SetLaunchDate(int timestamp) { // First make a System.DateTime equivalent to the UNIX Epoch. var dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0); // Add the number of seconds in UNIX timestamp to be converted. launch_date = dateTime.AddSeconds(timestamp); } }
Luego, cuando esté deserializando el JSON, verifique si el launch_date
es del tipo int
o DateTime
y cambie cómo configura el objeto según el tipo.