I am trying to deserialize a JSON object with a similar structure below
{
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
The problem is that the json may have an empty date value, so you must handle empty dates like:
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:
class users
{
public string name {get; set;}
public DateTime? dob {get; set;}
}
Regards