2012-08-08 15 views
33

Ecco il codice:Json.NET Disabilitare la deserializzazione su DateTime

 string s = "2012-08-08T01:54:45.3042880+00:00"; 

     JObject j1 = JObject.FromObject(new 
     { 
      time=s 
     }); 

     Object o = j1["time"]; 

Possiamo controllare che o si stringa e uguale a "2012-08-08T01: 54: 45,3,04288 milioni + 00: 00"

Ora trasferiamo j1.ToString() per un altro programma, che è

 { 
      "time": "2012-08-08T01:54:45.3042880+00:00" 
     } 

poi l'altro programma, cercare di analizzare di nuovo a jobject, che è

 JObject j2 = JObject.Parse(j1.ToString()); 

     Object o2 = j2["time"]; 

Ora, se si verifica o2, il tipo di o2 è Data, o2.ToString() è 8/7/2012 9:54:45 PM.

La mia domanda è:

È che non c'è modo per disattivare la Data di deserializzazione per JObject.Parse, e solo ottenere la stringa crudo?

Grazie in anticipo

risposta

49

durante l'analisi da un object-JObject è possibile specificare un JsonSerializer che istruisce come gestire date.

JObject.FromObject(new { time = s }, 
        new JsonSerializer { 
          DateParseHandling = DateParseHandling.None 
        }); 

Purtroppo Parse non ha questa opzione, anche se avrebbe senso per averlo. Guardando la fonte per Parse possiamo vedere che tutto ciò che fa è istanziare un JsonReader e poi lo passa a Load. JsonReader ha opzioni di analisi.

è possibile ottenere il risultato desiderato in questo modo:

JsonReader reader = new JsonTextReader(new StringReader(j1.ToString())); 
    reader.DateParseHandling = DateParseHandling.None; 
    JObject o = JObject.Load(reader); 
+0

programma ricevono l'intera stringa JSON che è { "tempo": "2012-08-08T01: 54: 45,3,04288 milioni + 00: 00"}, quindi il programma non può usare JObject.FromObject per analizzare, deve usare JObject.Parse per analizzare la stringa e JOjbect.Parse prende solo 1 parametro. – liuhongbo

+0

@liuhongbo, strano che 'Parse' non fornisce le opzioni che' FromObject' fa. Questo ha raggiunto la mia curiosità, quindi ho scaricato la fonte e trovato una soluzione. Modificherò la mia risposta. –

+5

grazie, Samuel Neff, che funziona perfettamente. Inoltre, trovato un altro modo per gestire questo problema: Impostazioni JsonSerializerSettings = new JsonSerializerSettings(); ; settings.DateParseHandling = DateParseHandling.None; JObject j2 = JsonConvert.DeserializeObject (j1.ToString(), impostazioni); – liuhongbo

Problemi correlati