Asp.net web api Web API-JsonConverter-Custom属性

Asp.net web api Web API-JsonConverter-Custom属性,asp.net-web-api,json.net,asp.net-web-api2,jsonserializer,Asp.net Web Api,Json.net,Asp.net Web Api2,Jsonserializer,我们有一个web api项目,为了将日期时间转换为日期时间,反之亦然,我们使用从JsonConverter扩展的DateTimeconverter。 我们以属性的形式为所有必需的DateTime属性使用此属性(如下所示): CustomDateConverter如下所示: public class CustomDateConverter: JsonConverter { private string[] formats = new string[] { "yyyy-MM-dd", "MM

我们有一个web api项目,为了将日期时间转换为日期时间,反之亦然,我们使用从JsonConverter扩展的DateTimeconverter。 我们以属性的形式为所有必需的DateTime属性使用此属性(如下所示):

CustomDateConverter如下所示:

public class CustomDateConverter: JsonConverter
{
    private string[] formats = new string[] { "yyyy-MM-dd", "MM/dd/yy", "MM/dd/yyyy", "dd-MMM-yy" };

    public CustomDateConverter(params string[] dateFormats)
    {
        this.formats = dateFormats;
    }

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

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        // custom code
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        // custom code
    }
}
我的问题是如何在使用属性时定义自定义构造函数?

当属性构造函数由Json.NET构造时,可以使用属性构造函数将参数传递给
CustomDateConverter
。此构造函数自动设置属性:

public class RootObject
{
    [JsonConverter(typeof(CustomDateConverter), new object [] { new string [] { "dd-MMM-yy", "yyyy-MM-dd", "MM/dd/yy", "MM/dd/yyyy" } } )]
    public DateTime DateTime { get; set; }
}
请注意,在
jsonConverterateAttribute
构造函数和构造函数中使用可能会让人认为正确的语法是

[JsonConverter(typeof(CustomDateConverter), new object [] { "dd-MMM-yy", "yyyy-MM-dd", "MM/dd/yy", "MM/dd/yyyy" } )]
然而,这是行不通的。Json.NET通过查找具有适当签名的构造函数,而您的构造函数的反射签名显示一个参数,即字符串数组

[JsonConverter(typeof(CustomDateConverter), new object [] { "dd-MMM-yy", "yyyy-MM-dd", "MM/dd/yy", "MM/dd/yyyy" } )]