代码之家  ›  专栏  ›  技术社区  ›  Andrea Tassera

将JSON Date反序列化为C#对象,DateTime返回01/01/0001

  •  0
  • Andrea Tassera  · 技术社区  · 2 年前

    我正在使用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的格式?)

    我做错了什么?

    2 回复  |  直到 2 年前
        1
  •  4
  •   ProgrammingLlama Raveena Sarda    2 年前

    添加 [JsonProperty("Start Date")] 在上面 public DateTime StartDate { get; set; } 和上面类似 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属性名(“开始日期”)和类属性名(“开始日期”)不一样,所以它默认为01/01/0001。

    这将在不需要任何额外费用的情况下起作用 IsoDateTimeConverter .

        2
  •  3
  •   Dragos Stoica    2 年前

    如果您的属性与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,因为它是日期时间默认值,并且您的值没有映射。