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

问题描述 投票:0回答:3

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

读取JSON的异常:Newtonsoft.Json.JsonReaderException:无法将字符串转换为DateTime:2003

异常消息非常直接:它不会将仅包含年份的字符串识别为有效的DateTime。

有没有办法可以解决这个问题(例如,通过让它始终反序列化到指定年份的1月1日),或者我只是不得不在模型类中将此字段设为字符串?

c# .net json json.net json-deserialization
3个回答
4
投票

反序列化时,

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

就像是:

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

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

2
投票

DateTime是一个始终包含历史精确点的结构。您可能想要考虑为GraduationYear设置一个整数成员。


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.