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

标签 c# json json.net asp.net-web-api2 swagger

我有一个 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/

相关文章:

python - 我收到 KeyError : '563690668808208423' when i'm trying to add exp to user

java - 如何从 URL 读取 JSON 文件?

C# Regex 使用 newLine 在两个字符串之间查找字符串

c# - C# winform如何检查SQL Server数据库中是否存在一条记录?

c# - C#中的接口(interface)继承

php - Ajax 用 php 内容更新表格

serialization - Json.NET DeserializeObject<List<T>> 不返回列表也不给出错误

由 c# Json.NET ToJson() FromJson()

c# - 如何使用 NewtonSoft Json.Net 将 Json 字典反序列化为平面类

c# - 强制 Excel 将多张纸打印为一个作业