2015-12-18 7 views
11

Questo funziona per tutte le proprietà:Differenza tra ReadAsAsync e JsonConvert

string resultAsString = await httpResponseMessage.Content.ReadAsStringAsync(); 
return await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<ApiData>(resultAsString)); 

mentre questo funziona solo per alcuni di essi:

return await httpResponseMessage.Content.ReadAsAsync<ApiData>(); 

qual è la differenza?

+0

Forse stanno usando serializzatori diversi? –

risposta

11

Il precedente legge in modo asincrono dallo stream e quindi utilizza un thread pool di thread per deserializzare la stringa JSON su un oggetto.

Quest'ultima legge in modo asincrono dal flusso, ma trasforma la stringa JSON in un oggetto sincrono, sul filo in cui ripreso dopo l'attesa asincrono leggere dal flusso.

Internamente, entrambi i metodi utilizzeranno Json.NET per analizzare i dati, poiché il metodo di estensione HttpContentExtensions.ReadAsAsync<T> chiamerà internamente lo JsonMediaTypeFormatter, che utilizza Json.NET.

Personalmente, utilizzerei quest'ultimo, poiché non vedo alcun vantaggio nell'esecuzione della serializzazione su un thread in background. Ma prova il tuo codice e vedi se questo funziona per te.

+0

Grazie per la tua risposta. Ho anche pensato che entrambi i metodi fossero gli stessi (usa Json.NET). Spogliamo via questa parte asincrona, ho ancora due risultati diversi per: 'string resultAsString = attendi httpResponseMessage.Content.ReadAsStringAsync(); ApiData res1 = JsonConvert.DeserializeObject (resultAsString); ' e ' ApiData res2 = attende httpResponseMessage.Content.ReadAsAsync (); ' Sto usando JsonProperties, potrebbe fare qualche differenza qui? – Senj

+0

'{" upstream_url ":" http: \/\/localhost: 34001 "," request_path ":" \/weather "," id ":" a897b9cb-d4cd-4eca-ce49-42c75e71e27b "," strip_request_path ": true , "nome": "WebFrontend", "created_at": 1450446815000} 'questo è il mio json. Con il primo metodo ottengo tutto riempito, in quest'ultimo solo ID e nome viene riempito. – Senj

+0

@Senj Aggiungi la struttura della classe e JSON alla domanda. –