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

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

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

所以你能帮忙在反序列化中如何处理空日期或无效日期吗

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

此致

你做的一切都是对的。只需将 DateTime 更改为 nullable

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