反序列化具有多列(包括日期时间属性)的 JSON 对象

在 C# 项目中,我正在检索一个 Event 对象,其中包含 subject (string)、location (string)、start_time (datetime)、end_time (datetime)、all_day_event (boolean) 和 calendar_id (int) 属性,作为 JSON 响应休息请求。该请求从数据库获取数据,并且 start_time 和 end_time 列的类型也是该数据库上的日期时间。但我在获取日期时间类型值时遇到问题。我得到这样的 JSON 对象:


[

  {

    "id": 1,

    "subject": "Test Event 1",

    "location": "Test Location",

    "start_time": "2019-08-22 10:17:53",

    "end_time": "2019-08-22 10:17:55",

    "all_day_event": 0,

    "calendar_id": 1

  }

]

这是我的事件类:


public class Event {


        public int Id { get; set; }


        public string Subject { get; set; }


        public string Location { get; set; }


        public DateTime StartTime { get; set; }


        public DateTime EndTime { get; set; }


        public bool AllDayEvent { get; set; }


        public int CalendarId { get; set; }

    }

这就是我反序列化 JSON 对象的方式:


events = JsonConvert.DeserializeObject<Event[]>(response.Content);

当我直接打印该 JSON 对象时,它会正确显示。但在我反序列化后,时间值显示为 01/01/0001 12:00 AM。我已经搜索了一段时间了。我找到了Deserialize Json Object - DateTimeDeserializing Import Io JSON with multiple objectDeserialize multiple json into object c#建议,但它们没有帮助。那么有什么方法可以正确获取这些时间值吗?太感谢了。



波斯汪
浏览 81回答 1
1回答

繁星点点滴滴

您需要装饰具有不同命名约定的属性。请记住,Json.Net 会自动将 JSON 的SnakeCase映射到 C# 的PascalCase属性。但是,如果你有snake_case或其他东西,你需要装饰属性。public class Event {        public int Id { get; set; }        public string Subject { get; set; }        public string Location { get; set; }        [JsonProperty("start_time")]        public DateTime StartTime { get; set; }        [JsonProperty("end_time")]        public DateTime EndTime { get; set; }        [JsonProperty("all_day_event")]        public bool AllDayEvent { get; set; }        [JsonProperty("calendar_id")]        public int CalendarId { get; set; }    }另外,你可以设置全局命名策略,以避免修饰你的模型的所有属性,例如如果JSON遵循snake_case
打开App,查看更多内容
随时随地看视频慕课网APP