[英]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.