处理反序列化中的空日期或无效日期 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;}
}
我正在尝试反序列化具有以下类似结构的 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;}
}