使用 Newtonsoft 反序列化可能仅包含一年的日期戳

Using Newtonsoft to deserialize a Date Stamp that might consist only of a year

所以,我有一个 JSON 对象,其中包含候选人完成学位的日期。日期格式没有特别标准化,可能只包含他们完成学位的年份。我正在尝试使用 Newtonsoft 反序列化此 JSON,但出现以下异常:

Exception reading JSON: Newtonsoft.Json.JsonReaderException: Could not convert string to DateTime: 2003

异常消息非常简单:它无法将仅包含年份的字符串识别为有效的日期时间。

有什么方法可以解决这个问题(例如,始终将其反序列化到指定年份的 1 月 1 日),或者我是否只能在我的模型中将此字段设为字符串 class ?

DateTime 是一个结构,它总是包含一个精确的历史点。您可能只想考虑为 GraduationYear.

设置一个整数成员

反序列化时,

将年份反序列化为 int 并添加另一个 属性 returns 完整日期。

类似于:

public class MyObject
{
  [JsonProperty("year")]
  public int Year { get; set; }

  [JsonIgnore]
  public DateTime FullDate() {
     return new DateTime (this.Year, 1, 1, 0, 0, 0);
  } 
}

如果输入 json 可以是不同的格式,您始终可以实现自己的 JsonConverter 来处理您想要的逻辑。

How to implement custom JsonConverter in JSON.NET to deserialize a List of base class objects? 有一些如何做到这一点的例子。它有点冗长,但可以让您完全控制反序列化数据的方式。