在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 - DateTime,Deserializing Import Io JSON with multiple objects,Deserialize multiple json into object c#的建议,但它们没有帮助。那么有什么方法可以正确获取这些时间值吗?非常感谢。
答案 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
,则可以设置全局命名策略,以避免修饰模型的所有属性。