我正在使用JObject
来处理我的客户帖子
我使用JObject
函数将ToObject
转换为强类型实体。
当日期时间值无效时 - 让我们说29\05\2014(since there aren't 29 months)
,我得到一个例外:
Could not convert string to DateTime: 29/05/2014. Path 'PurchaseDate.Value'.
我理解异常,我想在这种情况下防止崩溃。
如何告诉JObject忽略无效的日期值?在我的特定情况下,我的实体是一个可以为空的日期时间对象,所以如果解析失败(而不是崩溃),我想保持为null。
在这个特定的情况下,我说的是一个日期时间,但如果有人可以给我一个更通用的答案,我可以防止“无效的解析\转换”失败,那将是很好的,因为我的所有实体都包含可空字段,我不想在客户端处理验证。
答案 0 :(得分:1)
您无法仅为无效日期禁用它们,但您可以停止解析日期值,将它们存储为字符串并稍后实现自定义解析。
jObject.ToObject<MyObject>( new JsonSerializer {
DateParseHandling = DateParseHandling.None
});
答案 1 :(得分:1)
我找到了解决方法 - 添加转换器:
var js = new JsonSerializer
{
DateParseHandling = DateParseHandling.DateTime,
};
js.Converters.Add(new DateTimeConverter());
dynamic jsonObject = new JObject();
jsonObject.Date = "29/05/2014";
var entty = ((JObject)jsonObject).ToObject<Entity>(js);
说明:
public class Entity
{
public DateTime? Date { get; set; }
}
public class DateTimeConverter : DateTimeConverterBase
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
DateTime val;
if (reader.Value != null && DateTime.TryParse(reader.Value.ToString(), out val))
{
return val;
}
return null;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(((DateTime)value).ToString("MM/dd/yyyy"));
}
}