使用 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? 有一些如何做到这一点的例子。它有点冗长,但可以让您完全控制反序列化数据的方式。
所以,我有一个 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? 有一些如何做到这一点的例子。它有点冗长,但可以让您完全控制反序列化数据的方式。