2

우리는 웹 API 프로젝트와 inorder를 사용하여 날짜를 날짜로 변환하거나 그 반대로 변환하기 위해 JsonConverter에서 확장 한 DateTimeconverter를 사용하고 있습니다. (아래 그림 참조) 우리는 필요한 모든 날짜 시간 속성에 대한 속성의 형식이 사용됩니다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" })] 

,이 뜻이라고 생각 하나 이어질 수 있다는

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 [])을 통해 적절한 서명으로 생성자를 찾고 생성자의 반사 된 서명은 하나의 단일 매개 변수, 즉 문자열 배열을 표시합니다.

fiddle.