处理取消序列化Json.net中的空日期或无效日期



我正在尝试反序列化下面具有类似结构的JSON对象

{
details:[
{
name:"sandeep",dob:"15/04/1984"
},
{
name:"alex",dob:""
},
{
name:"paul",dob:"25/02/1990"
}]
}

这是我试图反序列化的类

class users
{
public string name{get;set;}
public datetime dob{get;set;}
}

这就是我反序列化的方式

var dateTimeConverter = new IsoDateTimeConverter { DateTimeFormat = format };
List<users> usr = JsonConvert.DeserializeObject<List<user>>(responseBody, dateTimeConverter);

但当反序列化时,它会触发

String '' was not recognised as a valid date time

因此,你能帮助如何在反序列化中处理空日期或无效日期吗

你做的每件事都很好。只需将DateTime更改为可为null的

class users
{
public string name{get;set;}
public Datetime? dob{get;set;}
}

问题是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);
}
}

或者使dob属性为null,如:

class users
{
public string name {get; set;}
public DateTime? dob {get; set;}
}

问候

最新更新