JToken:获取原始/原始JSON值

问题描述 投票:10回答:3

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

问题:

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

var value = data["SimpleDate"].Value<string>();

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

有没有办法获得这个原始值?另外,我无法更改JObject的创建方式(例如更改设置),因为它作为参数传递给我的课程...

(参考:The original NJsonSchema issue

c# .net json json.net
3个回答
12
投票

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

JsonReader

但是,您可以执行以下操作以Console.WriteLine(((JValue)data["SimpleDate"]).Value.GetType()); // Prints System.DateTime 格式提取日期:

ISO 8601

这将始终以适合JSON的字符串格式输出var value = JsonConvert.SerializeObject(data["SimpleDate"]); // value is "2012-05-18T00:00:00Z" 。由于您的原始日期采用这种格式,因此可以满足您的需求。

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

如果您在读取JValue.ToString()时可以更改设置,则可以使用JObject.ToString()

JObject.ToString()

JObject没有占用JsonSerializerSettings.DateParseHandling = DateParseHandling.None的重载,因此您需要使用JsonSerializerSettings.DateParseHandling = DateParseHandling.None。此设置最终传播到 var settings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.None }; var data = JsonConvert.DeserializeObject<JObject>(@"{ ""SimpleDate"":""2012-05-18T00:00:00Z"", ""PatternDate"":""2012-11-07T00:00:00Z"" }", settings); var value = data["SimpleDate"].Value<string>(); Debug.WriteLine(value); // Outputs 2012-05-18T00:00:00Z


0
投票

[我在JObject.Parse()中找到了一个解决方案:

JObject.Parse()

-3
投票

另一种方法-可以使用-正则表达式

JsonSerializerSettings

这是一个正则表达式模式,用于提取您要查找的数据-您只想要字符串,所以这里是。它不是JSON解析方法-但确实提取了字符串。

DeserializeObject

© www.soinside.com 2019 - 2024. All rights reserved.