c# - JToken : Get raw/original JSON value

标签 c# .net json json.net

有没有办法从 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 的创建方式(例如更改设置),因为它作为参数传递到我的类中...

(引用:The original NJsonSchema issue)

最佳答案

您无法获取原始字符串,日期字符串被识别并转换为 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/

相关文章:

asp.net - ReportViewer 正在阻止其他功能,直到报表查看器的加载完成

c# - XAML 继承(非代码隐藏)

c# - @Html.HiddenFor 是从我的 View 中重新发布显示数据的正确方法

用于查找的 C# 最佳 IDictionary 用法,可能找不到

c# - 没有 XML 属性节点的 C# 中的 XML 序列化

java - Android 尝试 GET http 请求时失败

c# - 反序列化日期时间时忽略时区偏移

javascript - 将数组作为查询字符串传递

c# - 如何重新设置 DataGridTextColumn 的 TextBox 的样式?

c# - 为什么 BitConverter 在转换 float 和字节时似乎返回不正确的结果?