【问题标题】:WebApi serialization for DateTime - how to deserialize?DateTime 的 WebApi 序列化 - 如何反序列化?
【发布时间】:2012-07-25 07:54:30
【问题描述】:

这段代码:

public class PhotoDescriptor
{
    public DateTime DateCreatedUtc { get; set; }
}

public class PhotosController : ApiController
{
    // GET api/photos
    public IEnumerable<PhotoDescriptor> GetListOfPhotos()
    {
        return new PhotoDescriptor[]
            {
                new PhotoDescriptor
                    {
                        DateCreatedUtc = DateTime.ParseExact(
                                "2012-07-24T00:28:41.8738770Z",
                                "o",
                                CultureInfo.InvariantCulture,
                                DateTimeStyles.None).ToUniversalTime(),
                    },
                new PhotoDescriptor
                    {
                        DateCreatedUtc = DateTime.ParseExact(
                                "2012-07-24T00:28:41.0000000Z",
                                "o",
                                CultureInfo.InvariantCulture,
                                DateTimeStyles.None).ToUniversalTime(),
                    },
            };
    }

返回以下 JSON:

[{"DateCreatedUtc":"2012-07-24T00:28:41.873877Z"},
 {"DateCreatedUtc":"2012-07-24T00:28:41Z"}]

请注意,从日期时间中删除了尾随零。但是当我试图解析这些字符串以恢复我的 DateTime 时,我得到了FormatException - String was not recognized as a valid DateTime:

var date = DateTime.ParseExact("2012-07-24T00:28:41.873877Z", "o", CultureInfo.InvariantCulture, DateTimeStyles.None);

这是正确的,根据 MSDN DateTime.ParseExact Method:

FormatException

s 不包含对应于的日期和时间 格式中指定的模式。

"o"格式is defined如下:

yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK

应该有明显的尾随零。

这是 WebApi 中的错误,还是我做错了什么?我应该如何将日期/时间字段传递给我的 .Net 客户端?

谢谢。

【问题讨论】:

    标签: .net datetime


    【解决方案1】:

    是的,您正在适当地解析硬编码值 - 但您的代码没有显示它们应该如何以 JSON 格式写出。您的“应该是”声明仅针对您解析的格式,这当然不会在DateTime 本身内传播。

    如果您想自己解析这些值(我不得不问为什么不为您完成这些...)您可以使用F 而不是f

    DateTime value = DateTime.ParseExact(text, 
                                         "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'FFFFFFFK",
                                         CultureInfo.InvariantCulture);
    

    我并不是说它不是 WebApi 中的错误 - 但我没有从您的帖子中看到任何迹象表明它 WebApi 中的错误。 .. 和Scott Hanselman's post on dates in WebApi 给出了“精确到秒”的例子,表明这是故意的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多