将 JSON 日期反序列化为 C# 对象,日期时间返回 01/01/0001

Deserialize JSON Date to C# Object with DateTime Returning 01/01/0001

我正在使用 Newtonsoft 翻译 JSON 显示日期的字符串

"[{\"Name\":\"Learning\",\"Start Date\":\"2022-03-01\",\"End Date\":\"2022-04-30\"]"

我想将它反序列化为这个自定义对象

public class MyObject
{
    public string Name { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
}

通过这样做

var myObject = JsonConvert.DeserializeObject<List<MyObject>>(jsonRecords,
            new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd" });

但是 StartDate 和 EndDate 对象总是显示为 01/01/0001,而我希望它们以这种格式显示:dd/MM/yyyy

我也尝试过使用 new IsoDateTimeConverter { DateTimeFormat = "dd/MM/yyyy" } 但这也不起作用(我认为您需要使用日期来自 json 的格式?)

我做错了什么?

public DateTime StartDate { get; set; } 上方添加 [JsonProperty("Start Date")] 并在 public DateTime EndDate { get; set; } 上方添加类似内容:

public class MyObject
{
    public string Name { get; set; }
    [JsonProperty("Start Date")]
    public DateTime StartDate { get; set; }
    [JsonProperty("End Date")]
    public DateTime EndDate { get; set; }
}

问题是 json 属性 名称 ('Start Date') 和 class 属性 名称 ('StartDate') 不一样所以它默认为 01/01/0001。

这将在不需要 IsoDateTimeConverter 的情况下工作。

好吧,如果您的属性与 JSON 属性不匹配,那是正常的。 “开始日期”之间有空格,因此您需要使用 JsonProperty 属性来指定要使用的 JSON 属性:

public class MyObject
     {
        public string Name { get; set; }

        [JsonProperty(PropertyName ="Start Date")]
        public DateTime StartDate { get; set; }

        [JsonProperty(PropertyName = "End Date")]
        public DateTime EndDate { get; set; }
    } 

您看到 01/01/0001 是因为它是日期时间默认值,您的值未映射。