Unterstützung mehrerer benutzerdefinierter DateTime-Formate beim Deserialisieren mit Json.Net

Unterstützung mehrerer benutzerdefinierter DateTime-Formate beim Deserialisieren mit Json.Net

Wenn Sie mehrere mögliche Datumsformate verarbeiten möchten, müssen Sie einen benutzerdefinierten JsonConverter erstellen die mehrere Formatzeichenfolgen akzeptieren und alle ausprobieren kann, bis einer erfolgreich ist. Hier ist ein einfaches Beispiel:

class MultiFormatDateConverter : JsonConverter
{
    public List<string> DateTimeFormats { get; set; }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(DateTime);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        string dateString = (string)reader.Value;
        DateTime date;
        foreach (string format in DateTimeFormats)
        {
            // adjust this as necessary to fit your needs
            if (DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
                return date;
        }
        throw new JsonException("Unable to parse \"" + dateString + "\" as a date.");
    }

    public override bool CanWrite
    {
        get { return false; }
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

Dann können Sie es wie folgt zu Ihren Einstellungen hinzufügen:

var settings = new JsonSerializerSettings();
settings.DateParseHandling = DateParseHandling.None;
settings.Converters.Add(new MultiFormatDateConverter 
{ 
    DateTimeFormats = new List<string> { "yyyyMMddTHHmmssZ", "yyyy-MM-ddTHH:mm" } 
});

Geige:https://dotnetfiddle.net/vOpMEY


No