相关疑难解决方法(0)

c#和newtonsoft中的JSON Date和DateTime序列化

我们将JSON发送到由swagger定义的API,其中一些属性是DateTime,格式为yyyy-MM-ddThh:mm:ss.000Z(毫秒必须是3位数或者在端点处验证失败),有些属于Date(否)时间)属性.

我看到许多消息说使用这样的格式化程序:

var jsonSettings = new JsonSerializerSettings();
jsonSettings.DateFormatString = "yyyy-MM-ddThh:mm:ss.000Z"; //try .fffZ too
var jsonObject= Newtonsoft.Json.JsonConvert.DeserializeObject<OurSwaggerObject>(json , setting);
Run Code Online (Sandbox Code Playgroud)

但这并没有将DateTimes转换为正确的格式,C#如何处理仅Date类型?它似乎总是序列化为DateTime.MinValue()

这是一个例子:

有人将json作为字符串发送给我,但日期和日期时间以不正确的格式发送给端点.我希望swagger类和json反序列化可以格式化它们,但事实并非如此.

这是招摇的生成类

 public class OurSwaggerObject
    {
        [Newtonsoft.Json.JsonProperty("dateTimeField", Required = Newtonsoft.Json.Required.Always)]
        [System.ComponentModel.DataAnnotations.Required]
        [System.ComponentModel.DataAnnotations.RegularExpression(@"^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z$")]
        public DateTime dateTimeField { get; set; }

        [Newtonsoft.Json.JsonProperty("dateField", Required = Newtonsoft.Json.Required.Always)]
        [System.ComponentModel.DataAnnotations.Required]
        [System.ComponentModel.DataAnnotations.RegularExpression(@"^\d{4}-\d\d-\d\d$")]
        public DateTime dateField { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

所以我试着强迫json是正确的,但我做错了或者缺少了什么

string json = @"{ 'dateTimeField': '1995-04-07T00:00:00',
                          'dateField': '1995-04-07T00:00:00'
                           }";

        /* The json we need to satisfy the swagger endpoint is:

          { 'dateTimeField': '1995-04-07T00:00:00.000Z',
            'dateField': '1995-04-07'
                           } …
Run Code Online (Sandbox Code Playgroud)

c# datetime json date json.net

16
推荐指数
1
解决办法
5万
查看次数

标签 统计

c# ×1

date ×1

datetime ×1

json ×1

json.net ×1