Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WebAPI中仅从JSON反序列化特定的日期时间格式_C#_Json_Datetime_Asp.net Web Api - Fatal编程技术网

C# 在WebAPI中仅从JSON反序列化特定的日期时间格式

C# 在WebAPI中仅从JSON反序列化特定的日期时间格式,c#,json,datetime,asp.net-web-api,C#,Json,Datetime,Asp.net Web Api,我有一个WebAPI设置,它使用Newtonsoft.JSON包接受JSON,其中一个字段是DateTime 为了避免无效或不明确的日期格式出现问题,我只希望在输入上接受特定的日期格式 例如,仅接受: var validFormats = new string[] { "yyyy-MM-ddTHH:mm:ss", // 2009-06-15T13:45:30 "yyyy-MM-ddTHH:mm:ss.fffffffzz", // 2009-06-15T13:4

我有一个WebAPI设置,它使用Newtonsoft.JSON包接受JSON,其中一个字段是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的私有成员,它似乎包含原始字符串,但我无法在转换器中访问它。

根据:

福伊的回答如下:

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

如果一个答案足够接近,您可以引用另一个问题的答案,您可能会投票将该问题作为一个重复问题关闭。不幸的是,这不足以让JSON进入WebAPI,因为序列化是自动完成的。我不知道在哪里需要在WebAPI请求上手动使用JsonConvert?
var dateTimeConverter = new IsoDateTimeConverter { DateTimeFormat = "dd/MM/yyyy" };
myObject obj = JsonConvert.DeserializeObject<myObject>(myJSONString, dateTimeConverter);