反序列化带有多个列的JSON对象,包括日期时间属性

时间:2019-08-22 11:21:16

标签: c# json datetime json.net

在C#项目中,我正在获取一个Event对象,其主题(字符串),位置(字符串),start_time(日期时间),end_time(日期时间),all_day_event(布尔值)和calendar_id(int)属性作为来自Rest请求的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 objectsDeserialize multiple json into object c#的建议,但它们没有帮助。那么有什么方法可以正确获取这些时间值吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

正如Aleks所说,您需要装饰具有不同命名约定的属性。请记住,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遵循example

,则可以设置全局命名策略,以避免修饰模型的所有属性。