2

私たちはWeb APIプロジェクトとinorderを持っていて、日付と時刻を変換しています.JsonConverterから拡張したDateTimeconverterを使用しています。 (下図のように)私たちは、すべての必要なのDateTimeプロパティの属性の形でこれを使用している:Web API - JsonConverter - カスタムアトリビュート

[JsonConverter(typeof(CustomDateConverter))] 

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 
    } 
} 

私の質問は、私が定義する方法であります属性を使用している間カスタムのコンストラクタ?

答えて

2

属性コンストラクタ[JsonConverterAttribute(Type,Object[])]を使用すると、CustomDateConverterがJson.NETによって構築されたときに引数を渡すことができます。 JsonConverterAttributeコンストラクタで、あなたのコンストラクタでparamsの使用は正しい構文はしかし

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

、この意志であることを考えるように1を招く可能性があることを

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; } 
} 

注:このコンストラクタは、自動的にConverterParametersプロパティを設定しますうまくいかない。 Json.NETは、Type.GetConstructor(Type [])を介して適切な署名付きのコンストラクタを探します。コンストラクタの反射シグネチャは、1つのパラメータ、つまり文字列の配列を示します。

fiddle

関連する問題