2

这段代码:

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 中删除了尾随零。但是当我试图解析这些字符串以取回我的 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

格式异常

s 不包含与 format 中指定的模式相对应的日期和时间。

格式"o"定义如下

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

所以应该有明显的尾随零。

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

谢谢你。

4

1 回答 1

5

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

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

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

我并不是说这不是WebApi 中的错误 - 但我没有从您的帖子中看到任何迹象表明它WebApi 中的错误......而Scott Hanselman 关于 WebApi 日期的帖子给出了“刚刚下降”的示例到第二个”,暗示这是故意的。

于 2012-07-24T23:54:30.513 回答