2012-02-21 38 views
5

Utilizo Fiddler para probar mi WCF Rest. Siempre me¿Cómo pasar el valor de TimeSpan en formato JSON?

HTTP/1.1 400 Bad Request 

con este valor mensaje:

{ 
    "session":{ 
     "Session":"088a688d-ea69-4264-9266-381e9e540d00", 
     "LoginID":"testid", 
     "Serial":"testserial" 
    }, 
    "sub":[ 
     { 
      "Type":0, 
      "StartDate":"\/Date(1319731200000+0800)\/", 
      "EndDate":"\/Date(1319731200000+0800)\/", 
      "Duration":"12:12:12" 
     } 
    ] 
} 

consigo el error en el valor de 'duración'. He estado buscando en la red pero sin suerte en absoluto.
Espero que encuentre la respuesta aquí. ¡Muchas gracias!

+0

¿Qué código está utilizando para producir y analizar esos datos? (Las secuencias de barra invertida/barra inclinada también huelen a pescado.) –

+0

Uso, RequestFormat = WebMessageFormat.Json, pero estoy seguro de que no hay ningún problema con StartDate y EndDate, lo he probado muchas veces. – fiberOptics

+0

Por cierto, traté de recuperar datos, y encontré que la duración tiene este tipo de valor, "Duración": PT20H8M, valor de TimeSpan: 20:08:00, ¿está familiarizado con esto? Gracias – fiberOptics

Respuesta

4

El enfoque simple es analizar el intervalo de tiempo como una cadena y convertirlo a un TimeSpan usando su rutina estática de 'análisis'.

Con JSON y WCF usted está confiando en el JSON serializador para convertir objetos de ida y vuelta, por desgracia una vez que comience 'en movimiento' de distancia de tipos de objetos nativos, es decir, cadenas, numéricos, y en objeto específico, que tiende a ahogar a menos Usas el formato exacto.

Personalmente, no he tenido la experiencia de pasar a través de la Timespan de DataContractJsonSerializer qué formato se requiere, sin embargo this post pondrá de relieve el formato exacto junto con el hecho de que es posible

+0

Gracias por una buena explicación. En realidad, estoy a punto de convertirlos a una cadena y luego analizar los datos más tarde. Pero todavía espero encontrar la manera más fácil. – fiberOptics

-1

¿Cuál es el tipo de .NET "sub" ? Parece una colección o tipo de matriz de algún tipo; ¿Cuál es el tipo que .NET espera que tengan esos elementos? ¿Ese tipo tiene las propiedades Type, StartDate, EndDate y Duration? ¿Tiene alguna otra propiedad que esté marcada con [IsRequiredAttribute] pero no presente?

Si crea un nuevo DataContractJsonSerializer (tipo = TimeSpan) y trata de deserializar solo la cadena "12:12:12", ¿qué ocurre entonces?

Aún no te respondo, pero creo que hacer estos ejercicios no debería resolver tu problema ahora, pero también ayudará a diagnosticar errores futuros que podrías encontrar en la deserialización de esta cadena.

Ver también Deserialize array values to .NET properties using DataContractJsonSerializer para algunos punteros

+0

Gracias, pero lo he probado muchas veces y seguramente no hay problema con las propiedades y los valores, EXCEPTO el valor de "Duración", que es un tipo de TimeSpan que (por mi opinión) Json no puede serializar. – fiberOptics

Cuestiones relacionadas