将 json utc 日期从 jira api 反序列化为 .net 日期时间

Posted

技术标签:

【中文标题】将 json utc 日期从 jira api 反序列化为 .net 日期时间【英文标题】:Deserialize json utc date from jira api to .net datetime 【发布时间】:2013-09-22 12:49:32 【问题描述】:

Jira 正在使用此日期时间格式响应 GET 请求:

“2013-09-17T12:07:36.000-0500”

我已经做到了这一点: settings.DateTimeFormat = new DateTimeFormat("yyyy-MM-ddTHH:mm:ss.fff");

1)。我需要逃避'T'吗? (\T) 2)。我不知道如何处理'-0500' a) 看起来 zzz 可能会起作用,但这让我得到 '-05:00' b) 我试过了,但没用:“yyyy-MM-ddTHH:mm:ss.fffZ”

【问题讨论】:

我认为 jira 不会以这种形式返回字符串。它应该是 xml 或 json。您的序列化程序不会自动将其转换为 DateTime 吗? Jira 的日期时间在 REST API 调用的响应中如下所示。创建:“2013-09-17T12:07:35.000-0500”这是我们正在谈论的 JSON,是的,我正在使用反序列化器对其进行转换。问题是反序列化器期望的日期看起来像这样 '\/(date)\/' 有没有可能你是这样看的。也许一个正确的序列化程序可以给你一个DateTime。如何发布您的代码以及 Jira 返回的内容。 我发送了一个 GET 请求来搜索问题,它返回原始 JSON 格式的日期格式如我所描述的那样。如果您需要示例,请在此处导航:jira.atlassian.com/rest/api/latest/issue/JRA-9.json 您使用哪个序列化程序。例如,Json.Net 可以解析它。 【参考方案1】:

试试“yyyy-MM-dd'T'HH:mm:ss.FFFK”

【讨论】:

【参考方案2】:

这是经典的XY-Problem。 (X 将是:我该如何处理这个 json 响应

看看如何使用Json.Net轻松完成

WebClient wc = new WebClient();
string json = wc.DownloadString("https://jira.atlassian.com/rest/api/latest/issue/JRA-9.json");
dynamic jObj = JObject.Parse(json);
DateTime dt = (DateTime)jObj.fields.updated;

当然,也可以将 json 字符串反序列化为具体的类。在这种情况下,您可以使用this site

【讨论】:

我想这就是我尝试使用 DataContractJsonSerializer 得到的结果。试图不使用框架之外的代码。我已经吸取了教训。我已经让它与 JSON.Net 一起工作,它开箱即用,没有 DateTime 格式化地狱。谢谢。【参考方案3】:

这个 sn-p 能解决你的问题吗?

using System.Web.Script.Serialization;

var json = @" date : ""2013-09-17T12:07:36.000-0500""";
var date = new javascriptSerializer().Deserialize<Dictionary<string, DateTime>>(json);

【讨论】:

以上是关于将 json utc 日期从 jira api 反序列化为 .net 日期时间的主要内容,如果未能解决你的问题,请参考以下文章

如何使用客户端的时区将 asp.net 日期时间反序列化为 JSON 日期时间

Javascript将日期转换为UTC [重复]

无法使用 Joda Time API 将日期转换为 UTC [关闭]

如何将 JSON 返回反序列化为从 RestSharp 调用到 API 的对象数组?

反序列化 JSON 子文档

如何将 Json Serializer 配置为在 web api 中为输入和输出参数提供单独的日期转换器?