簡體   English   中英

從WebAPI中的JSON僅反序列化特定的DateTime格式

[英]Deserialize only specific DateTime formats from JSON in WebAPI

我使用Newtonsoft.Json包設置了一個接受JSON的WebAPI,其中一個字段是DateTime。

為了避免日期格式無效或模棱兩可的問題,我只想在輸入中接受特定的日期格式。

例如,僅接受:

var validFormats = new string[]
{
    "yyyy-MM-ddTHH:mm:ss",           // 2009-06-15T13:45:30
    "yyyy-MM-ddTHH:mm:ss.fffffffzz", // 2009-06-15T13:45:30.0000000-07:00
};

我遇到的問題是,無論我在哪里嘗試進行任何手動格式驗證或解析,解析器似乎都已經反序列化並將字符串轉換為DateTime對象,因此我無法掌握原始格式的日期來進行檢查。

做到這一點的最佳方法是什么?

更新1:

我最接近的是使用自定義轉換器:

public class JsonDateTimeConverter : DateTimeConverterBase
{
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var validFormats = new string[]
        {
            "yyyy-MM-ddTHH:mm:ss",           // 2009-06-15T13:45:30
            "yyyy-MM-ddTHH:mm:ss.fffffffzz", // 2009-06-15T13:45:30.0000000-07:00
        };

        DateTime dt;
        if (DateTime.TryParseExact(reader.Value.ToString(), validFormats, null, DateTimeStyles.None, out dt))
        {
            return dt;
        }

        throw new JsonException("Failed to parse DateTime");
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(((DateTime)value).ToString("o"));
    }
}

配置為在WebApiConfig中使用為

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new JsonDateTimeConverter());

但這仍然存在問題,其中reader.value似乎已經被轉換為DateTime對象。 JsonReader上有一個名為_stringReference的私有成員,該成員似乎包含原始字符串,但是我無法在轉換器中訪問它。

根據:

福伊從這里的答案: https : //stackoverflow.com/a/37441177/2711861

var dateTimeConverter = new IsoDateTimeConverter { DateTimeFormat = "dd/MM/yyyy" };
myObject obj = JsonConvert.DeserializeObject<myObject>(myJSONString, dateTimeConverter);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM