Json.Net,如何用“Z”而不是+00:00序列化DateTimeOffset,但保留其他时区偏移量?

2024-02-24

使用 .NET Core 和 Json.NET,我如何序列化DateTimeOffset (not DateTime) 使得 UTC+00:00变成Z同时保留任何其他时区偏移量(-04:00例如)?

这个帖子 https://stackoverflow.com/a/42816827/918244 is for DateTime,但是有了它,我设法替换了+00:00 by Z转换时all时区转换为 UTC

new JsonSerializerSettings {
    Converters = new JsonConverter[] {
        new IsoDateTimeConverter {
            DateTimeStyles = DateTimeStyles.AdjustToUniversal,
            DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'",
        }
    }
};

我想保留时区偏移信息,i.e.

2019-12-10T17:00:00Z for new DateTimeOffset(2019, 12, 10, 17, 0, 0, TimeSpan.Zero)

and

2019-12-10T13:00:00-04:00 for new DateTimeOffset(2019, 12, 10, 13, 0, 0, TimeSpan.FromHours(-4))

The DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssK"建议的作品DateTime但输出+00:00, not Z, for DateTimeOffset...

See 这个 .NET Fiddle 用于复制 https://dotnetfiddle.net/iduukx我的尝试。


你可以子类化IsoDateTimeConverter https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Converters/IsoDateTimeConverter.cs并覆盖CanConvert https://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_Converters_DateTimeConverterBase_CanConvert.htm仅转换类型的对象DateTimeOffset and DateTimeOffset?。那么,当DateTimeOffset.Offset为零,输出为DateTime通用格式:

public class IsoDateTimeOffsetConverter : IsoDateTimeConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(DateTimeOffset) || objectType == typeof(DateTimeOffset?);
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        var dateTimeOffset = (DateTimeOffset)value;
        if (dateTimeOffset.Offset == TimeSpan.Zero)
        {
            // If there is no offset, serialize as a DateTime
            base.WriteJson(writer, dateTimeOffset.UtcDateTime, serializer);
        }
        else
        {
            base.WriteJson(writer, value, serializer);
        }
    }       
}

然后像这样使用它:

var settings = new JsonSerializerSettings {
    Converters = {
        new IsoDateTimeOffsetConverter(),
    }
};

演示小提琴here https://dotnetfiddle.net/dbsGIR.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Json.Net,如何用“Z”而不是+00:00序列化DateTimeOffset,但保留其他时区偏移量? 的相关文章

随机推荐

  • 运行 python setup.py install 时强制编译器

    有没有办法在运行时显式强制编译器构建 Cython 扩展python setup py install Where setup py的形式为 import os path import numpy as np from setuptools
  • Django QuerySet 与原始 SQL 性能注意事项

    我正在学习 Django 及其 ORM 数据访问方法 有一些我很好奇的东西 在一个特定端点中 我进行了多次数据库调用 对 Postgres 下面是其中一个示例 projects Project objects filter Q first
  • C#/ASP.NET MVC3,从 DateTime.UtcNow 转换为客户端时区。如何获取时区信息?

    我通过在插入新记录时调用 DateTime UtcNow 将日期存储为 UTC 我想将该日期转换为访问者的时区 TimeZoneInfo 上有一个方法可以做到这一点 public static DateTime ConvertTimeFro
  • 使用 Underscore.JS 进行深度挑选

    我正在尝试使用 underscoreJs 来操作 JavaScript 对象 但遇到问题 这是我的例子 var data label SomeName parent id parentId resources name ID1NAME ca
  • 使用 R 登录 .NET 站点

    我正在尝试使用我的凭据登录 NET 站点 但无法使其正常工作 我的代码的灵感来自下面的线程 如何使用 R 登录并从 aspx 网页下载文件 https stackoverflow com questions 15853204 how to
  • 如何在React.js中从本地Json文件获取图像Url

    我希望能够通过从 JSON 文件获取 URL 来显示本地文件夹中的图像 到目前为止我已经尝试过 src require blog imUrl src 博客 imgUrl src 需要 blog imgUrl 当我使用 require 时遇到
  • mkdir 仍然是原子的吗? (安装在 SAN 上的 Windows 7 文件系统)

    我们有一些通过基于目录的队列进行通信的旧应用程序 队列中的每个项目都是一个文件 并且有一个头文件维护队列中项目的文件名的有序列表 当然 这个旧代码需要在推送和弹出项目时锁定队列 它所做的是创建一个锁定子目录 假设 mkdir 是一个原子操作
  • 更改 Git 存储库目录位置。

    对于 Windows 版的 Git Github 如果我有一个包含此目录的存储库 C dir1 dir2 我需要做什么才能将存储库文件移动到C dir1 显然我可以物理地复制和粘贴文件 但是我需要在 Git 端做什么呢 我在 GitHub
  • 从 Tensorflow 中的张量中随机选择元素

    给定一个张量 其形状为Nx2 怎么可能选择k该张量中的元素类似于np random choice 同等概率 另一点需要注意的是 N在执行过程中动态变化 意思是说我正在处理一个动态大小的张量 你可以只包np random choice as
  • LINQ to SQL Where 子句可选条件

    我正在使用 LINQ to SQL 查询 但遇到了一个问题 我有 4 个可选字段来过滤数据结果 我所说的可选是指可以选择是否输入值 具体来说 一些文本框可能有一个值或有一个空字符串 以及一些下拉列表可能已经选择了一个值 也可能没有选择 例如
  • CSS 问题 - ASP.NET 日历选择器

    EDIT通过以下答案之一 我能够纠正表格内渲染的此问题 我仍然在我的列表视图中看到这个问题 我已经为 ListView 尝试过这个 CSS 但它没有解决问题 FIX FOR CALENDAR IN TABLE DateTime Edit w
  • :确认 Rails 不工作

    我刚刚开始在 ruby on Rails 中进行编码 并且一直在遵循一个指南 该指南使用的 Rails 版本比我正在使用的版本更过时 我用的是3 2 12 这是我的代码 据我了解 这些符号被传递到 Rails 然后转换为 html 或 ja
  • 使用 DataGrid 或 ListView 哪个更好地显示大量数据?

    我想在表中显示 gt 50000 行 哪个是最好使用的控件 DataGrid 还是 ListView 在详细信息视图中 这些控件中哪一个具有更好的性能 正如汉斯在对原始问题的评论中所说 它们都将具有糟糕的性能 只有用户肯定会因为同时显示如此
  • 如何使用 Highcharts 停止色度差异“噪音”

    当将 Chromatic 作为合并请求的一部分时 找到实际有意义的差异就像大海捞针一样 Highcharts 有其奇怪的变化 其中部分 例如线条 的位置似乎略有不同 我们尝试过半音阶设置 公差 但这会导致缺少实际小变化的问题 延迟 仍然不起
  • 在同一 Procfile 下运行两个程序

    我有2个discord bot程序 一个是python代码 另一个是nodejs 我想知道是否在 procfile 中 就像你说的worker python 一样 有没有办法让它同时运行我的 python 文件和 codejs 文件 现在我
  • 为什么 React Native 0.30 无法从 iPhone 设备上的开发服务器获取更改?

    自从我升级到 React Native 0 30 以来 我的物理 iPhone 上的构建是从预捆绑文件而不是开发服务器加载的 查看更改的唯一方法是再次构建并运行应用程序 以前 我可以通过刷新立即在 iPhone 上看到变化 如果我使用模拟器
  • 清除 ActiveRecord 缓存

    我正在使用 ActiveRecord 3 0 无 Rails 构建命令行应用程序 如何清除 ActiveRecord 维护的查询缓存 初步近似 ActiveRecord Base connection query cache clear
  • 在 Mac OS X Lion 中链接 OpenCV 2.3 程序:未找到架构 x86_64 的符号

    我在尝试编译程序时遇到问题本教程 http opencv itseez com doc tutorials introduction linux gcc cmake linux gcc cmake html来自OpenCV 2 3官方文档
  • 手动使用数据注释验证和对象图

    假设我有两个简单的类 public class CustomerDetails Required public string Address get set public class Customer public Customer Det
  • Json.Net,如何用“Z”而不是+00:00序列化DateTimeOffset,但保留其他时区偏移量?

    使用 NET Core 和 Json NET 我如何序列化DateTimeOffset not DateTime 使得 UTC 00 00变成Z同时保留任何其他时区偏移量 04 00例如 这个帖子 https stackoverflow c