加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – JToken:获取原始/原始JSON值

发布时间:2020-12-15 07:58:22 所属栏目:百科 来源:网络整理
导读:有没有办法从JToken获取原始/原始 JSON值? 问题: var data = JObject.Parse(@"{ ""SimpleDate"":""2012-05-18T00:00:00Z"",""PatternDate"":""2012-11-07T00:00:00Z""}");var value = data["SimpleDate"].Valuestring(); 该值现在是05/18/2012 00:00:00但
有没有办法从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

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读