有没有办法从 JToken
获取原始/原始 JSON 值?
问题:
var data = JObject.Parse(@"{
""SimpleDate"":""2012-05-18T00:00:00Z"",
""PatternDate"":""2012-11-07T00:00:00Z""
}");
var value = data["SimpleDate"].Value<string>();
值
现在是 05/18/2012 00:00:00
但我需要原始字符串 2012-05-18T00:00:00Z
。
有没有办法得到这个原始值?此外,我无法更改 JObject
的创建方式(例如更改设置),因为它作为参数传递到我的类中...
最佳答案
您无法获取原始字符串,日期字符串被识别并转换为 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
。禁用 DateTime
识别:
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
JObject.Parse()
没有过载需要一个 JsonSerializerSettings
,所以使用 DeserializeObject
.此设置最终会传播到 JsonReader.DateParseHandling
.
相关 Newtonsoft 文档:
关于c# - JToken : Get raw/original JSON value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35138346/