背景
我有一些JSON被反序列化为具有DateTime
属性的类。
有时,JSON
的相应元素为null
。
当您尝试将JSON
反序列化到该类时,会引发错误,因为普通的DateTime
无法接受null
。
简单但删除功能
因此,最简单的解决方案是使类的接受属性成为可空的DateTime
(DateTime?
),但如果您这样做,那么很多DateTime
方法你不能再使用那些属性了。
工作但是......很奇怪?
因此,在寻找替代方案时,我考虑过以下几点:
public class FooRelaxed
{
[Required(ErrorMessage = "Please enter the id.")]
public int? Id { get; set; }
[Required(ErrorMessage = "Please enter the Start Date.")]
public DateTime? StartDate { get; set; }
[Required(ErrorMessage = "Please enter the End Date.")]
public DateTime? EndDate { get; set; }
public FooRelaxed() { }
public FooRelaxed(
int? id,
DateTime? startdate,
DateTime? enddate)
{
this.Id = id;
this.EndDate = enddate;
this.StartDate = startdate;
}
}
public class FooStrict
[Required(ErrorMessage = "Please enter the id.")]
public int Id { get; set; }
[Required(ErrorMessage = "Please enter the Start Date.")]
public DateTime StartDate { get; set; }
[Required(ErrorMessage = "Please enter the End Date.")]
public DateTime EndDate { get; set; }
public FooStrict() { }
public FooStrict(FooRelaxed obj)
{
this.Id = Convert.ToInt32(obj.Id);
this.EndDate = Convert.ToDateTime(obj.EndDate);
this.StartDate = Convert.ToDateTime(obj.StartDate);
}
}
然后我将这些类用于:
JSON
反序列化为类FooRelaxed,它具有可为空的DateTime
属性Validator.TryValidateObject
来验证结果对象的属性。DateTime
属性我确信必须有比这更好的方法,但我不知道它是什么。任何人都可以提出更好的解决方案吗?
答案 0 :(得分:2)
使用适当的JsonProperty
属性进行装饰:
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
或者
[JsonProperty("<NameOfProperty>", NullValueHandling=NullValueHandling.Ignore)]
最终代码为:
[JsonProperty("EndDate", NullValueHandling=NullValueHandling.Ignore)]
public DateTime EndDate { get; set; }
[JsonProperty("StartDate", NullValueHandling=NullValueHandling.Ignore)]
public DateTime StartDate { get; set; }