2017-01-13 1 views
1

DateTime 값에서 타임 스탬프를 제거하는 사용자 정의 JSON 포맷터가 있습니다. 웹 API 2 용 사용자 정의 JSON 포맷터 사용

var isoJson = JsonConvert.SerializeObject(value, new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd" }); 
     return isoJson; 

내가 그 포맷을 사용

이 문자열은 위의 포맷에 의해 때문에 내 WebApiConfig 파일 JSON.Net 포매터의 두 배 직렬화 : 다음은 코드입니다. 나는 JSON.Net 포매터를 제거하고 내 사용자 정의 하나의 JSON 한 번 직렬화를 사용하지만이 XML에 포함되면

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 

: 다음은 JSON.Net 포매터 코드입니다.

JSON.Net 포맷터를 제거하고 내 JSON을 XML에 포함하지 않고도 내 사용자 정의 포맷터를 사용하려면 어떻게해야합니까?

+1

왜 날짜 전용 속성에 변환기 특성을 적용하는 대신 변환기를 전역으로 바꾸려고합니까? 이 [비슷한 질문] (http://stackoverflow.com/questions/16320762/dates-without-time-in-asp-net-web-apis-json-output) 얼마나 쉽게 추가 할 수 있습니다 보여줍니다 예 :'[JsonConverter (typeof (OnlyDateConverter))]'속성에 –

답변

1

웹 API는 사용자가 말하거나 XML을 사용하지 않는 한 문자열을 Json으로 두 번 변환하지 않습니다. 그래도 코드를 제공하지 않으므로 각 문제가 발생하는 이유를 말할 수는 없습니다.

원래 문제를 해결하면서 DateTime 속성을 날짜로만 serialize하는 것은 매우 쉽습니다. 사용자 지정 변환기를 만들어 속성을 통해 원하는 속성에 적용하면됩니다. 이것은 Json.NET의 Serializing Dates in JSON에 설명되어 있습니다. 실제 구현 in this arguably duplicate SO question을 찾을 수 있습니다.

질문에서 복사는 변환기를 만들 :

public class OnlyDateConverter : IsoDateTimeConverter 
{ 
    public OnlyDateConverter() 
    { 
     DateTimeFormat = "yyyy-MM-dd"; 
    } 
} 

을 한 다음 날짜 전용으로 직렬화하고자하는 모든 속성에 적용

public class MyClass 
{ 
    ... 
    [JsonConverter(typeof(OnlyDateConverter))] 
    public DateTime MyDate{get;set;} 
    ... 
} 

같은 질문 쇼의 또 다른 대답 구성을 통해 전 세계적으로 변경하는 방법 :

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" }); 

또는 custo m 변환기 :

+0

다양한 솔루션을 가져 주셔서 감사합니다. 나는 config 경로를 갔다. 그리고 그것은 잘 작동했다. – user1647160

관련 문제