JToken:获取原始/原始JSON值

问题描述

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

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"

这将始终输出JValueJSON合适的字符串格式。由于您的原始日期采用这种格式,因此可以满足您的需求。

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

如果您能够在阅读时更改设置,则JObject可以使用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

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

解决方法

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

问题:

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创建方式(例如更改设置),因为它作为参数传递给我的课程…

(参考:原始的NJsonSchema问题

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...