[英]Handling Empty or invalid date in deserialisation 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 更改为可为空
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属性可以为空,例如:
class users
{
public string name {get; set;}
public DateTime? dob {get; set;}
}
问候
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.