2012-08-08 20 views
33

Aquí está el código:Json.NET Desactivar la deserialización de DateTime

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

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

     Object o = j1["time"]; 

Podemos comprobar que o se secuencia y es igual a "2012-08-08T01: 54: 45.3042880 + 00: 00"

Ahora transferir j1.ToString() a otro programa, que es

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

luego en el otro programa, intenta analizar de nuevo a jobject, que es

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

     Object o2 = j2["time"]; 

Ahora, si comprobamos o2, el tipo de o2 es Fecha, o2.ToString() es 8/7/2012 9:54:45 PM.

Mi pregunta es:

¿Hay es manera de desactivar la deserialización Fecha de JObject.Parse, y acaba de obtener la cadena de crudo?

Gracias de antemano

Respuesta

49

al analizar desde una object-JObject puede especificar un JsonSerializer que instruye cómo manejar fechas.

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

Desafortunadamente Parse no tiene esta opción, aunque lo lógico sería que tenerlo. Si observamos la fuente de Parse, podemos ver que todo lo que hace es crear una instancia de JsonReader y luego pasa eso a Load. JsonReader tiene opciones de análisis.

que puede lograr el resultado deseado de esta manera:

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

el programa reciben toda la cadena JSON que es { "tiempo": "2012-08-08T01: 54: 45.3042880 + 00: 00"}, entonces el programa no puede usar JObject.FromObject para analizar, tiene que usar JObject.Parse para analizar la cadena y JOjbect.Parse solo toma 1 parámetro. – liuhongbo

+0

@liuhongbo, raro que 'Parse' no proporcione las opciones que' FromObject' hace. Esto alcanzó su punto máximo en mi curiosidad, así que descargué la fuente y encontré una solución. Editaré mi respuesta. –

+5

gracias, Samuel Neff, eso funciona perfecto. Además, encontró otra forma de manejar este problema: JsonSerializerSettings settings = new JsonSerializerSettings(); ; settings.DateParseHandling = DateParseHandling.None; JObject j2 = JsonConvert.DeserializeObject (j1.ToString(), configuraciones); – liuhongbo

Cuestiones relacionadas