2016-08-18 4 views
0

요청에서 응답 끝점으로 가져온 큰 JSON 조각을 deserialize하고 있습니다.사용자 지정 변환기를 사용하여 스트림에서 Json을 비 직렬화

는 난이 구성 될 때마다 ResultItem 위해 주입하는 몇몇의 메타 데이터의 필요

var serializer = new JsonSerializer(); 
var sr = new StreamReader(responseStream)) 
var jsonTextReader = new JsonTextReader(sr)) 
{ 
    return serializer.Deserialize<ResultItem>(jsonTextReader); 
} 

아래의 코드를 사용한다. 내가

public class ResultItemConverter : CustomCreationConverter<ResultItem> 
{ 
    private Metadata typeMetadata; 

    public ResultItemConverter(Metadata typeMetadata) 
    { 
     this.typeMetadata = typeMetadata; 
    } 

    public override ResultItem Create(Type objectType) 
    { 
     return new ResultItem(this.typeMetadata); 
    } 
} 

다음과 같이 정의 컨버터를 썼다이를 위해 불행하게도 나는 역 직렬화 방법이 컨버터를 통과 할 수있는 방법을 볼 수 없습니다! 발견 된 모든 예제는 변환기를 지정할 수있는 'JsonConvert.DeserializeObject'메소드를 사용합니다.

내 질문 -

  • 내가 직렬화 복원되는 객체의 ctor에 몇 가지 추가 정보를 전달해야하는 경우, 사용자 정의 변환기를 잘 내 방법은 무엇입니까?
  • 어떻게 deserialization을 스트림과 함께 내 사용자 지정 변환기를 사용할 수 있습니까? 스트림을 문자열로 직렬화 할 수 없습니다. 그 결과는 OutOfMemoryException이됩니다.

답변

3

시리얼 라이저 자체를 사용자 정의해야합니다. 예를 들면 :

serializer.Converters.Add(new ResultItemConverter()); 

나는 당신이이 경우에 사용자 지정 변환기를 사용하는이 있는지 모르겠지만, 그건 당신이 그렇게 쉽게 할 수있는 방법입니다.

+0

jeez ... 'Converters'속성이 컬렉션이라는 사실을 간과했습니다. getter를보고 더 이상 보지 못했습니다! – alwayslearning