繁体   English   中英

处理反序列化 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 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM