此代码:
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 ':' 毫米 ':' SS fffffffK
。“
如此明显尾随的零应该在那里。
它是WebApi中的错误,还是我做错了什么?我应该如何将日期/时间字段传递给我的.Net客户端?
谢谢。
答案 0 :(得分:5)
是的,您正在适当地解析硬编码值 - 但您的代码没有显示如何使用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给出的例子“只是到了第二个”,这表明这是故意的。