Случается, третьи лица могут пренебречь типобезопасность в их JSON. Я рекомендую вам связаться с ними. У меня был сценарий, в котором свойство было либо строковым массивом, либо «ложным». Json.NET не понравилось, так как временный хак, я создал этот пользовательский конвертер игнорировать исключение десериализации:
public class IgnoreDataTypeConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return true;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
try { return JToken.Load(reader).ToObject(objectType); }
catch { }
return objectType.IsValueType ? Activator.CreateInstance(objectType) : null;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
}
Этот подход «TryConvert» не рекомендуется. Используйте его как временное решение после того, как вы отправите свои мысли дизайнерам создающего JSON, который вы потребляете.
Возможно, вам стоит взглянуть на основную причину недействительных данных и сначала устранить ее, прежде чем пытаться обойти ее. –
Похоже, это поле установлено в 'DateTime.MinValue'. Это не обязательно «недействительно». Поскольку 'DateTime' - тип значения, он не может быть нулевым; если вы хотите это разрешить, подумайте о том, чтобы сделать ваши поля типа значений «Nullable». – David
Вы можете пометить свойство с помощью атрибута [XmlIgnore], если вы не хотите его сериализовать – auburg