JToken:获取原始/原始JSON值

有没有办法从JToken获取原始/原始JSON值?

问题:

 var data = JObject.Parse(@"{ ""SimpleDate"":""2012-05-18T00:00:00Z"", ""PatternDate"":""2012-11-07T00:00:00Z"" }"); var value = data["SimpleDate"].Value(); 

value现在是05/18/2012 00:00:00但我需要原始字符串2012-05-18T00:00:00Z

有没有办法获得这个原始价值? 另外,我无法改变创建JObject的方式(例如更改设置),因为它作为参数传递到我的类中…

(参考: 最初的NJsonSchema问题 )

您无法获取原始字符串,日期字符串被识别并转换为JsonReader本身内的DateTime结构。 如果你这样做,你可以看到这个:

 Console.WriteLine(((JValue)data["SimpleDate"]).Value.GetType()); // Prints System.DateTime 

但是,您可以通过以下方式提取ISO 8601格式的日期:

 var value = JsonConvert.SerializeObject(data["SimpleDate"]); // value is "2012-05-18T00:00:00Z" 

这将始终以JSON适当的字符串格式输出JValue 。 由于您的原始日期采用此格式,因此可能符合您的需求。

(老实说,我很惊讶JValue.ToString()以非ISO格式输出日期,因为JObject.ToString()确实以ISO格式输出包含的日期。)

如果您在阅读JObject时能够更改设置,则可以使用JsonSerializerSettings.DateParseHandling = DateParseHandling.None

  var settings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.None }; var data = JsonConvert.DeserializeObject(@"{ ""SimpleDate"":""2012-05-18T00:00:00Z"", ""PatternDate"":""2012-11-07T00:00:00Z"" }", settings); var value = data["SimpleDate"].Value(); Debug.WriteLine(value); // Outputs 2012-05-18T00:00:00Z 

JObject.Parse()没有带有JsonSerializerSettings ,所以你需要使用DeserializeObject 。 此设置最终会传播到JsonReader.DateParseHandling

另一种方法 – 那会起作用 – 正则表达式

 SimpleDate(?:.*):(?:.*?)\"([0-9|-]{1,}T[0-9|:]+Z) 

它是一个正则表达式模式来提取你寻找的数据 – 你只需要字符串,所以在这里。 它不是JSON解析方法 – 但它确实提取了字符串。

这是一个如何工作的样本