当前位置: 首页 > 知识库问答 >
问题:

在ASP. NET Core 3.0中使用System.文本。乔森

龚镜
2023-03-14

我正在迁移一个Web API从。NET Core 2.2到3.0,并希望使用新的System.文本。json.当使用Newtonsoft时,我能够使用下面的代码格式化DateTime。我怎样才能完成同样的任务?

.AddJsonOptions(options =>
    {
        options.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;
        options.SerializerSettings.DateFormatString = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZ";
    });

共有3个答案

施博文
2023-03-14

这是asp的垃圾箱火灾。net核心日期序列化/反序列化可能更容易理解,当您看到转储程序的日期火灾时。Parse()和日期。ParseExact()。我们在javascript之间传递日期,所以我们不想被格式化。我们只想在UTC的DateTime和ISO 8601之间透明地序列化和反序列化。这不是默认设置,没有配置选项,解决方案如此时髦和脆弱,真是令人尴尬。这是目前对我有效的,基于D.English的写作答案和阅读链接答案。。。

// in Startup.cs ConfigureServices()

services.AddMvc().AddJsonOptions(options =>
{
    options.JsonSerializerOptions.Converters.Add(new UtcDateTimeConverter());
});


public class UtcDateTimeConverter : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        Debug.Assert(typeToConvert == typeof(DateTime));
        return DateTime.Parse(reader.GetString(), null, System.Globalization.DateTimeStyles.RoundtripKind);
    }

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString("yyyy-MM-ddTHH:mm:ss.fffZ", System.Globalization.CultureInfo.InvariantCulture));
    }
}
巫墨一
2023-03-14

迁移到Core3时,我不得不更换系统。文本Json再次使用Newtonsoft的方法是:

services.AddControllers().AddNewtonsoftJson();

但我在Angular应用程序中遇到了与UTC日期相同的问题,我必须添加此项以获取UTC中的日期:

services.AddControllers().AddNewtonsoftJson(
       options => options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc);

在你的情况下,你应该能够做到这一点:

services.AddControllers().AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;
        options.SerializerSettings.DateFormatString = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZ";
    });

这是有效的,我希望它能帮助。。。

洪鹏海
2023-03-14

用自定义格式化程序解决。谢谢Panagiotis的建议。

public class DateTimeConverter : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        Debug.Assert(typeToConvert == typeof(DateTime));
        return DateTime.Parse(reader.GetString());
    }

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssZ"));
    }
}


// in the ConfigureServices()
services.AddControllers()
    .AddJsonOptions(options =>
     {
         options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
     });
 类似资料:
  • 问题内容: 但是,我需要从System Groovy脚本读取文件,因此使用Text-finder或Groovy PostBuild插件的解决方案将不起作用。 如何从系统Groovy脚本获取工作区路径?我尝试了以下方法: 谢谢! 问题答案: 每个构建都有一个 工作区 ,因此您需要首先找到所需的项目。(在詹金斯中,术语“工作”和“项目”在API中也是可以互换使用的。) 之后,您可以交叉手指,只需调用已

  • 这只是我给tkinter文本输入框在pyplay中的一次尝试。我很确定它不会正常工作,但决定无论如何都要试一试,因为我没有什么可失去的。tkinter屏幕不显示,直到你退出pyplay。所以,我不是问是否有人知道如何修复代码,而是问是否有人知道在pyplay中创建文本框的最简单方法。我知道有一个文本输入类模块可以导入。如果你认为这是最简单的方法,那么你能告诉我吗?如果没有,请告诉我你认为最简单的方

  • 问题内容: 我的页面中有一个表格,我使用colgroups以相同的方式设置此列中的所有单元格的格式,对背景颜色和所有颜色均适用。但似乎无法弄清为什么文本对齐中心不起作用。它不会使文本居中对齐。 例: CSS: 问题答案: 只有有限的CSS属性集适用于column,而不是其中之一。 有关这种情况的说明,请参见“为什么只有四个属性应用于表列的奥秘”。 在您的简单示例中,最简单的解决方法是添加以下规则:

  • 问题内容: 我将使用带有一些数据的本地JSON文件。我的问题是,存储文件的最佳/正确方式在哪里?我应该如何访问它及其内容? 我之前通过http处理过json,但没有本地处理过。 问题答案: 有很多方法 您可以将JSON文件存储在资产文件夹中,并按如下方式读取它们-http://codingdict.com/questions/88307 对于基本的JSON解析,Android的内置JSONObje

  • 本文向大家介绍在python中使用NLTK标记文本,包括了在python中使用NLTK标记文本的使用技巧和注意事项,需要的朋友参考一下 给定一个字符序列和一个定义的文档单元,令牌化就是将其切成碎片(称为令牌)的任务,也许同时丢掉某些字符(例如标点符号)。在nltk和python的上下文中,这仅仅是将每个标记放入列表的过程,因此我们可以遍历一个标记,而不是一次遍历每个字母。 例如,给定输入字符串-

  • 我的mongoDB中有这种数据 这里假设我做一个查询 这给了我她的结果,但我有名字“nna”或名字“Ana”或名字“anna”或任何其他组合。那么,如何使用Mongoose获取MongoDB中字符串的最接近值呢