为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
波斯汪 2023-09-16 15:16:11
在 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 - DateTime、Deserializing Import Io JSON with multiple object、Deserialize multiple json into object c#建议,但它们没有帮助。那么有什么方法可以正确获取这些时间值吗?太感谢了。
查看完整描述

1 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

您需要装饰具有不同命名约定的属性。请记住,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


查看完整回答
反对 回复 2023-09-16
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信