2012-02-21 12 views
5

Uso Fiddler per testare il mio WCF Rest. Ho sempre trovatoCome passare il valore di TimeSpan nel formato JSON?

HTTP/1.1 400 Bad Request 

con questo valore del messaggio:

{ 
    "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" 
     } 
    ] 
} 

ottengo l'errore di valore 'Durata'. Ho cercato su internet ma senza fortuna.
Spero di trovare la risposta qui. Molte grazie!

+0

Quale codice stai usando per produrre e analizzare i dati? (Le sequenze backslash/forward-slash hanno anche un odore di pesce.) –

+0

Io uso, RequestFormat = WebMessageFormat.Json, ma sono sicuro che non ci sono problemi con StartDate e EndDate, l'ho provato molte volte. – fiberOptics

+0

BTW, ho provato a recuperare i dati, e ho scoperto che la durata ha questo tipo di valore, "Durata": PT20H8M, valore TimeSpan: 20:08:00, conosci questo? Grazie – fiberOptics

risposta

4

L'approccio semplice è quello di analizzare l'intervallo di tempo come una stringa e la conversione in un TimeSpan utilizzando la sua routine statica 'parse'.

Con JSON e WCF ci si affida al Serializzatore JSON per convertire gli oggetti avanti e indietro, sfortunatamente una volta che si inizia a "spostarsi" da tipi di oggetti nativi, cioè stringhe, numeri e in oggetti specifici, tende a soffocare a meno usi il formato esatto.

Personalmente, ho avuto alcuna esperienza di passare Timespan di attraverso il DataContractJsonSerializer quale formato è necessario, tuttavia this post metterà in evidenza il formato esatto insieme se è possibile

+0

Grazie per la spiegazione. In realtà sto per convertirli in stringa e poi analizzare i dati in seguito. Ma spero ancora di trovare il modo più semplice. – fiberOptics

-1

Qual è il tipo .NET di "sub" ? Sembra un tipo di raccolta o array di qualche tipo; qual è il tipo che .NET si aspetta che questi elementi abbiano? Quel tipo ha le proprietà Type, StartDate, EndDate e Duration? Ha altre proprietà contrassegnate con [IsRequiredAttribute] ma non presenti?

Se si crea un nuovo DataContractJsonSerializer (type = TimeSpan) e si prova a deserializzare solo la stringa "12:12:12", cosa succede dopo?

Non ti sto ancora dando una risposta - ma penso che fare questi esercizi non dovrebbe risolvere il tuo problema ora, ma aiuterà anche a diagnosticare gli errori futuri che potresti incontrare nella deserializzazione di questa stringa.

Vedi anche Deserialize array values to .NET properties using DataContractJsonSerializer per alcuni indicatori

+0

Grazie, ma l'ho provato molte volte e sicuramente nessun problema con proprietà e valori TRANNE il valore "Durata" che è un tipo TimeSpan che (per quanto mi pare) Json non può serializzare. – fiberOptics

Problemi correlati