gpt4 book ai didi

c# - 将日期作为字符串传递 - 防止 json.net 解析日期

转载 作者:行者123 更新时间:2023-11-30 13:06:11 27 4
gpt4 key购买 nike

我有一个 Web API 中间层,它使用一个 API,该 API 公开一个字段,该字段将时间戳记为字符串(该字段是字符串,它包含类似“2016-05-31T14:12:45.753Z”的值)。

中间层的代理类是使用 Visual Studio 从 Swagger 端点生成的,并且在底层使用 Json.NET 反序列化对象。

我可以看到该字段是作为字符串接收的(这很好):

inputObject {{  "When": "2016-05-31T14:12:45.753Z" }} Newtonsoft.Json.Linq.JToken {Newtonsoft.Json.Linq.JObject}

但是,即使目标字段是字符串,inputObject["When"] 的值也会被解析为时间戳。

    inputObject["When"] {31/05/2016 14:12:45}   Newtonsoft.Json.Linq.JToken {Newtonsoft.Json.Linq.JValue}

然后

            JToken whenValue = inputObject["When"];
if (whenValue != null && whenValue.Type != JTokenType.Null)
{
this.When = ((string)whenValue);
}

最后 this.When 是一个字符串,值为 31/05/2016 14:12:45

是否有一个选项可以防止 json.net 解析日期然后再次将其转换为字符串?

请记住,这种转换发生在自动生成的代码中,所以我正在寻找某种方式来装饰服务器端的字段,这将使 Swagger 以某种方式标记它,然后生成的类将避免反序列化/序列化问题。

类似于:

          [JsonProperty("This really is a string, leave it alone")]
public string When { get; private set; }

最佳答案

(回答我自己的问题)

我需要一个快速的解决方案,这是我的临时解决方案,以供记录。

我将日期格式化为

"When": "2016-05-31 14:12:45"

而不是

"When": "2016-05-31T14:12:45.753Z"

这可以防止它被解释。前端 (javascript) 代码知道来自 API 的时间戳是 UTC,它会在将时间戳转换为本地时间并格式化显示之前附加“Z”,例如:

 <td>{{vm.prettyDateTimeFormat(item.StatusDate+'Z')}}</td>

控制码:

  vm.prettyDateTimeFormat = function (dateString)
{
var momentDate = moment(dateString, "YYYY-MM-DD HH:mm:ssZZ");
if (typeof(momentDate) === "undefined" || (!momentDate.isValid()))
{
return dateString;
}

//The format needs to be sortable as it ends up in the grid.
var nicePrettyDate = momentDate.format('YYYY-MM-DD HH:mm:ss');
return nicePrettyDate;
}

就我不喜欢这个解决方案而言,它让我们完成了演示。这个问题显然在积压日志中,现在需要妥善解决。

关于c# - 将日期作为字符串传递 - 防止 json.net 解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37587055/

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