Tengo problemas con un servicio WCF REST. El objeto de conexión que trato de devolver tiene ciertas propiedades no establecidas, lo que da como resultado DateTime.MinValue para las propiedades de tipo DateTime. El servicio devuelve un documento vacío (con el estado HTTP 200 ???). Cuando intento llamar la serialización JSON a mí mismo, la excepción que se produce es:¿Por qué DateTime.MinValue no se serializa en zonas horarias antes de UTC?
SerializationException: valores DateTime que son mayores que DateTime.MaxValue o menor que DateTime.MinValue cuando se convierte a UTC no puede ser serializado a JSON.
Esto puede ser reproducido mediante la ejecución del siguiente código en una aplicación de consola:
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DateTime));
MemoryStream m = new MemoryStream();
DateTime dt = DateTime.MinValue;
// throws SerializationException in my timezone
ser.WriteObject(m, dt);
string json = Encoding.ASCII.GetString(m.GetBuffer());
Console.WriteLine(json);
¿Por qué es este comportamiento? Creo que está relacionado con mi zona horaria (GMT + 1). Como DateTime.MinValue es predeterminado (DateTime), esperaría que esto se pueda serializar sin problemas.
¿Algún consejo sobre cómo hacer que mi servicio REST se comporte? No quiero cambiar mi DataContract.
¿Puede hacer que su DateTime se pueda anular y usar null como valor predeterminado? – Gabe
@Gabe: creo que podría. Se siente estúpido al cambiar mi tipo para trabajar con un detalle de serialización. Pero es probablemente el camino más pragmático. –