【问题标题】:ASP.NET Controller FormatException: String was not recognized as a valid DateTimeASP.NET 控制器 FormatException:字符串未被识别为有效的 DateTime
【发布时间】:2018-11-07 17:41:28
【问题描述】:

在 Postman 中,我通过 POST 向 API 发送以下 JSON。

{
"id": "21",
"crgName": "Walgreens - 11/07/2018 - Standard ",
"crgStarteddatetime": "2018-11-07T10:11:10",
}

...但是,我收到以下错误:FormatException: String was not Recognized as a valid DateTime.

在我的控制器中,我使用 DateTimeFormat 来格式化日期时间:

 public static RemoteContextType DeserializeJsonString<RemoteContextType>(string jsonString)
        {
            //create an instance of generic type object
            RemoteContextType obj = Activator.CreateInstance<RemoteContextType>();
            MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString));

            var serializer = new DataContractJsonSerializer(obj.GetType(),
                new DataContractJsonSerializerSettings
                {
                    DateTimeFormat = new

                             DateTimeFormat("yyyy-MM-dd'T'HH:mm:ss.fff'Z'")
                });

            obj = (RemoteContextType)serializer.ReadObject(ms);

            ms.Close();

            return obj;
           }

...我的语法中是否存在关于如何格式化日期的问题?我的意图是形成日期,因为它反映在 JSON 中。关于我做错了什么,我能得到一些帮助吗?

【问题讨论】:

    标签: c# json asp.net-mvc api controller


    【解决方案1】:

    问题出在这一行:

    DateTimeFormat = new DateTimeFormat("yyyy-MM-dd'T'HH:mm:ss.fff'Z'")
    

    您使用 'Z' 格式说明符和 3 位秒小数 (fff format specifier) 将格式完全指定为 UTC/Zulu 日期时间,但 crgStarteddatetime 中使用的值没有这两者(即yyyy-MM-dd'T'HH:mm:ss)。

    根据 JSON 示例,您应该更改格式以完全匹配crgStarteddatetime 中提供的格式:

    var serializer = new DataContractJsonSerializer(obj.GetType(), new DataContractJsonSerializerSettings
                     {
                         DateTimeFormat = new DateTimeFormat("yyyy-MM-dd'T'HH:mm:ss")
                     });
    

    如果 crgStarteddatetime 的实际 JSON 数据具有混合日期格式(一些日期具有 yyyy-MM-dd'T'HH:mm:ss,而其他日期可能具有 yyyy-MM-dd'T'HH:mm:ss'Z'),请使用更灵活的 K format specifier 处理时区格式:

    var serializer = new DataContractJsonSerializer(obj.GetType(), new DataContractJsonSerializerSettings
                     {
                         DateTimeFormat = new DateTimeFormat("yyyy-MM-dd'T'HH:mm:ssK")
                     });
    

    【讨论】:

    • 谢谢,非常感谢您的帮助
    猜你喜欢
    • 2021-05-04
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多