gpt4 book ai didi

.net - DateTime 的 WebApi 序列化 - 如何反序列化?

转载 作者:行者123 更新时间:2023-12-02 05:36:13 24 4
gpt4 key购买 nike

这段代码:

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 does not contain a date and time that corresponds to the pattern specified in format.

“o”格式is defined如下:

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

如此明显的尾随零应该在那里。

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

谢谢。

最佳答案

是的,您正在适本地解析硬编码值 - 但您的代码没有说明应如何将它们写成 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给出“精确到秒”的例子,表明这是故意的。

关于.net - DateTime 的 WebApi 序列化 - 如何反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11640875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com