그래서 저는 잭슨을 사용하여 객체를 병렬 처리하고 직렬화하려고합니다. 개체는 계층 구조를 가지고 있으며, T는 문자열, 또는 자바 번호 클래스 중 하나 중 하나입니다 깊은 아래로 hierachy에서잭슨의 중첩 제네릭 (Nested Generics)
List<T>
있다.
일반 목록 디시리얼 라이징은이 포럼에서 공통적 인 주제였으며 mapper.readValue를 사용하여 목록을 비 직렬화 또는 직렬화하는 매퍼를 작성하는 방법을 알고 있습니다.
어떻게 해야할지 모르겠지만 make가 어떻게 해야할지 모르겠지만 최상위 레벨에서 매퍼를 호출하면 명시 적으로 포함 된 클래스의 매개 변수화에 대해 알지 못하므로 매개 변수가있는 목록이 포함 된 최하위 수준 클래스에 도달하면 사용자 지정 디시리얼라이저를 호출합니다.
게터/세터/생성자와 간단한 예는 ommitted :
class A {
String name;
B thing;
}
class B {
String command;
List<C<?>> conditions;
}
class C<T> {
String type;
List<T> parameters
}
그리고 한 가지의를 serialises 잭슨 명령을 쓰고 싶어요. 나는에 부착하는 방법 사용하고 있습니다 :
public String toJSON() throws JsonProcessingException{
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping();
return mapper.writeValueAsString(this);
}
을하지만이 자신의 타입 정보를 손실 제네릭 컬렉션의 알려진 문제를 가지고 deserialisable없는.
here 조언을 사용하여 특정 클래스를 일반 매개 변수로 deserialize 할 수 있지만 이러한 솔루션을 결합하는 방법은 없습니다. Jackson이 C에 대한 사용자 지정 디시리얼라이저를 작성하고 클래스 유형에 도달하면이를 사용할 수 있고 그렇지 않으면 다른 클래스에 대해 정상적으로 작동하는 일반 serialiser를 사용할 수 있기를 바랬습니다. 그 B
필드의 직렬화 복원 할 때
Gson 라이브러리 방식을 사용하려고 시도하십시오. –
@sercan 여러분이 가지고있는 객관적인 증거를 모두 보여주십시오. –
누군가가 Gson에서이 문제에 대한 해결책을 제시하면 기꺼이 그것을 사용할 것입니다. ... 지금은 사용 설명서를 읽지 않았습니다. –