【问题标题】:Deserializing a JSON object with multiple columns including datetime properties反序列化具有多列的 JSON 对象,包括日期时间属性
【发布时间】:2019-12-27 17:04:59
【问题描述】:

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

【问题讨论】:

  • 您需要将[JsonProperty("start_time")] 属性应用到StartTime 属性

标签: c# json datetime json.net


【解决方案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

【讨论】:

  • @OğuzÖztınaz 检查文档示例,也许您最好使用 SnakeCaseNamingStrategy 而不是装饰您(可能)拥有的所有模型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多