2017-01-20 1 views
0

나머지를 남겨 클래스 D에 대해서만 커스텀 직 병렬 변환기를 "등록"하는 방법이 있습니까? 기본 디시리얼라이저가 클래스 A에서 C까지 처리하고 클래스 A의 루트 객체를 deserialize하기 위해 단일 메소드 호출로 전체 데이터 구조를 deserialize 할 수 있습니까?는 데이터 구조 내에서 하나 개의 클래스에 대한 사용자 지정 디시리얼라이저를 지정하고 내가 중첩 된 데이터 구조를 가지고있는 기본 디시리얼라이저

아마도 API를 오해했습니다. 그러나 지금까지 발견 한 JSON.NET의 유일한 접근 방식은 네 클래스 모두에 대해 사용자 정의 디시리얼라이저를 작성해야하며 각 클래스는 네 스터 라이즈 된 디시리얼라이저를 중첩 클래스에 호출 할 수 있어야합니다. 즉, A에 대한 사용자 정의 디시리얼라이저는 B에 대한 사용자 정의 디시리얼라이저를 호출합니다. 클래스 D가 deserialize되는 방법을 사용자 정의하면 정말 원하는 모든 작업이 수반됩니다.

+0

정의의 어떤 종류의 당신이 원하는 여기

는 Newtonsoft의 API 문서에서 관련 페이지입니다 이루다? –

+0

나는 당신이 [이것과 비슷한 것] (http://www.newtonsoft.com/json/help/html/SerializingJSONFragments.htm)에 대해 이야기하고 있다고 생각합니까? –

+0

@ChetanRanpariya 달성하고자하는 커스터마이징은 D가 실제로 두 개의 하위 유형 인 D1과 D2가있는 인터페이스이며, 역 직렬화되기 전에 어떤 것이 있는지 확인하려고합니다. 이 특정 유형의 사용자 지정을 수행하는 방법은 다음에서 설명합니다. http://stackoverflow.com/questions/8030538/how-to-implement-custom-jsonconverter-in-json-net-to-deserialize-a-list-of -base 그래서 사용자 지정 deserializer를 작성하는 방법을 알고 있지만 이제는 기본 deserializer가 나머지 데이터 구조를 처리하는 동안 deserialization 중에 호출되도록 "register"하는 방법을 알고 싶습니다. – skrilmps

답변

0

JSON.NET이 특정 클래스에 사용할 사용자 정의 디시리얼라이저를 지정하려면 JsonConverter 특성을 사용하면됩니다. 위의 질문의 예에서, 클래스 D의 선언은 보일 수 있습니다와 같은 : ClassDConverter 사용자 정의 디시리얼라이저하고 확장해야합니다

[JsonConverter(typeof(ClassDConverter))] 
public class ClassD 
{ 

} 

JsonConverter :

public class ClassDConverter : JsonConverter 
{ 
    public override object ReadJson(...) 
    { 
      // custom deserialization code here 
    } 

    public override bool CanConvert(Type objectType) 
    { 
      return typeof(ClassD).isAssignableFrom(objectType); 
    } 

    public override bool CanWrite 
    { 
     get { return false; } 
    } 
} 

CanWrite 반환 false 나는 디시리얼라이저 쓰기를 원하기 때문에 만. 직렬화하기를 원하면 WriteJson 메서드를 재정의 할 수 있습니다. 열거 http://www.newtonsoft.com/json/help/html/JsonConverterAttributeClass.htm

이 웹 사이트는 직렬화/드의 맥락에서 예를 들어 추가 세부 사항을 제공 : 이 https://gooddevbaddev.wordpress.com/2013/08/26/deserializing-c-enums-using-json-net/

관련 문제