2016-09-06 6 views
1

.NET 코어 용으로 개발 중이므로 Noda Time (2.0.0-alpha20160729)의 불안정한 최신 알파를 사용하고 있습니다. JSON으로 데이터를 처리 중입니다.Noda Time 용 사용자 지정 JSON 변환기

생년월일 입력란에 사용자 입력을 허용하고 사용자가 길을 혼동 할 수있는 경우 여러 입력 형식을 지원하고 싶습니다. 예를 들어 MM-dd-yyyyM/d/yy을 모두 받아 들일 수 있습니다.

serialization docs는 특히 다음 상태 :

맞춤 NodaPatternConverter 컨버터를 사용 패턴에서 쉽게 생성 될 수있다.

내 삶은 내가 어떻게 할 수 없는지 알 수 없다. 내가 이해하는 바에는 NodaPatternConverter<LocalDate> 자체를 구현해야하며 구문 분석에는 IPattern<LocalDate>, 유효성 검사에는 Action<T>을 구현해야합니다.

필자는 IPattern.Parse<LocalDate>을 작성하기 시작했으나이 함수는 ParseResult<LocalDate>을 반환하며 이는 분명히 액세스 할 수 없습니다. 내가 발견 한 어떤 방법으로도 인스턴스화하거나 사용할 수 없습니다. 그러므로 나는 붙어있다.

Noda Time 용 사용자 지정 JSON 변환기를 올바르게 만들려면 어떻게해야합니까?

답변

8

첫 번째로, 이것은 JSON 변환기에서해야 할 일처럼 들리지 않습니다. JSON에서 직접 사용자 입력을 받아들이면 문자열로 처리하고 나중에 구문 분석해야합니다 (IMO). JSON은 사람 대 기계 형식이 아닌 기계 대 기계 형식입니다. 웹 응용 프로그램이라고 가정하면 클라이언트에서 데이터를 구문 분석하고 ISO-8601로 다시 포맷하려면 moment.js를 사용하는 것이 좋습니다. 또는 문자열을 역 직렬화하여 다음을 서버 측 코드로 변환하십시오.

어쨌든 JSON을 변환 만 IPattern<LocalDate>를 구현해야 - 당신이 이미 존재하는NodaPatternConverter<LocalDate>을 구현 할 필요가 없습니다. 당신은 필요

이제
var pattern = ...; 
var converter = new NodaPatternConverter<LocalDate>(pattern); 

, 당신의 패턴을 구현하기 위해, 당신은 아마 실제로 기존의 패턴에서 그것을 만들 - 구현을 작성하는 결과까지 연이어 IPattern<LocalDate> 대의원이 성공하는 ParseResult<T>이다 - 또는 마지막으로 실패한 ParseResult<T>을 반환하십시오. ParseResult<T>에 액세스 할 수는 없지만 자신의 인스턴스를 (현재) 만들 수는 없습니다. 그게 내가 언급해야 할 것이지만,이 경우에 정말로 필요는 없습니다.

코드는 이미 존재하지만 노출되지 않습니다. Parse 부분이 CompositePattern이되기를 원합니다. Format 부분을 구현하려면 패턴의 첫 번째 패턴을 사용하여 필요에 따라 값을 형식화 할 수 있습니다.

+0

아, 알겠습니다. 이것을 시험해보고 다시보고하겠습니다. 내 모델에 문자열과 LocalDate를 둘 다 사용하지 않고 이전 모델에서 후자를 채우기보다는 변환기가 성공하면 유효성 검사와 변환을 처리하는 가장 좋은 장소라고 생각했습니다. (그것은 Json.net과도 마찬가지로 혼란 스럽다. 직렬화를 위해 하나를 사용하고 직렬화를 위해 다른 것을 사용하려고한다. 그러나 나는 빗나간 다.) – vaindil

관련 문제