Voici le code:
string s = "2012-08-08T01:54:45.3042880+00:00";
JObject j1 = JObject.FromObject(new
{
time=s
});
Object o = j1["time"];
Nous pouvons vérifier que o est une chaîne et est égal à "2012-08-08T01: 54: 45.3042880 + 00: 00"
Maintenant, nous transférons j1.ToString () vers un autre programme, qui est
{
"time": "2012-08-08T01:54:45.3042880+00:00"
}
puis à l'autre programme, essayez de le réanalyser vers JObject, qui est
JObject j2 = JObject.Parse(j1.ToString());
Object o2 = j2["time"];
Maintenant, si nous vérifions o2, le type de o2 est Date, o2.ToString () est 8/7/2012 9:54:45 PM.
Ma question est:
Existe-t-il un moyen de désactiver la désérialisation de la date pour JObject.Parse et d'obtenir simplement la chaîne brute?
Merci d'avance
Lors de l'analyse d'un object
vers JObject
, vous pouvez spécifier un JsonSerializer
qui indique comment gérer les dates.
JObject.FromObject(new { time = s },
new JsonSerializer {
DateParseHandling = DateParseHandling.None
});
Malheureusement, Parse
n'a pas cette option, bien qu'il serait logique de l'avoir. En regardant la source de Parse
, nous pouvons voir que tout ce qu'il fait est instancier un JsonReader
puis le transmettre à Load
. JsonReader
a des options d'analyse.
Vous pouvez obtenir le résultat souhaité comme ceci:
JsonReader reader = new JsonTextReader(new StringReader(j1.ToString()));
reader.DateParseHandling = DateParseHandling.None;
JObject o = JObject.Load(reader);
Vous pouvez accomplir cela en utilisant JsonConvert.DeserializeObject
également, en utilisant JsonSerializerSettings
:
string s = "2012-08-08T01:54:45.3042880+00:00";
string jsonStr = $@"{{""time"":""{s}""}}";
JObject j1 = JsonConvert.DeserializeObject<JObject>(jsonStr, new JsonSerializerSettings {DateParseHandling = DateParseHandling.None});