[英]Handling Empty or invalid date in deserialisation Json.net
I am trying to deserialize a JSON object with a similar structure below我正在尝试反序列化具有以下类似结构的 JSON 对象
{
details:[
{
name:"sandeep",dob:"15/04/1984"
},
{
name:"alex",dob:""
},
{
name:"paul",dob:"25/02/1990"
}]
}
This is the class to which I am trying to deserialize这是我试图反序列化的类
class users
{
public string name{get;set;}
public datetime dob{get;set;}
}
This is how I am deserializing这就是我反序列化的方式
var dateTimeConverter = new IsoDateTimeConverter { DateTimeFormat = format };
List<users> usr = JsonConvert.DeserializeObject<List<user>>(responseBody, dateTimeConverter);
But when deserializing, its triggering但是当反序列化时,它的触发
String '' was not recognised as a valid date time
So Could you please help how handle empty or invalid dates in deserializing那么你能帮助我如何处理反序列化中的空日期或无效日期吗?
You are doing everything right.你做的一切都是正确的。 just change DateTime to nullable
只需将 DateTime 更改为可为空
class users
{
public string name{get;set;}
public Datetime? dob{get;set;}
}
The problem is that the json may have an empty date value, so you must handle empty dates like:问题是 json 可能有一个空日期值,所以你必须处理空日期,如:
var deserializeOptions = new JsonSerializerOptions();
deserializeOptions.Converters.Add(new MyDateTimeJsonConverter());
myobject = JsonSerializer.Deserialize<users>(jsonString,
deserializeOptions);
class MyDateTimeJsonConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer
serializer)
{
// implement in case you're serializing it back
}
public override object ReadJson(JsonReader reader, Type objectType, object
existingValue,
JsonSerializer serializer)
{
var dataString = (string) reader.Value;
// one way to handle empty/invalid dates
return DateTime.TryParse(dateString, out var dateValue) ? dateValue : DateTime.MinValue;
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(DateTime);
}
}
or make dob property a nullable like:或使dob属性可以为空,例如:
class users
{
public string name {get; set;}
public DateTime? dob {get; set;}
}
Regards问候
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.