를 직렬화 할 수없는 나는 직렬화와 다음과의 LinkedHashMap 데이터를 deseriliaze하려고 :플렉스 JSON가 제대로 역 직렬화 /의 LinkedHashMap
LinkedHashMap<String, Object> o = new LinkedHashMap<String, Object>();
o.put("1", "a");
o.put("2", "b");
o.put("3", "c");
o.put("4", new BigDecimal("9999999999999999999999.00999999999999999999999"));
String serialize = new JSONSerializer().deepSerialize(o);
System.out.println("serialize" + serialize);
LinkedHashMap deserialize = new JSONDeserializer<LinkedHashMap>().deserialize(serialize, LinkedHashMap.class);
System.out.println("deserialize:" + deserialize);
나는 ClassCastException이 얻을 : 직렬화 복원 할 때
serialize{"1":"a","2":"b","3":"c","4":9999999999999999999999.00999999999999999999999}
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.LinkedHashMap
at com.JSONUtil.main(JSONUtil.java:161)
그래서 나는 약간 다른 접근을 시도 다음과 같이하십시오 :
HashMap deserialize = new JSONDeserializer<HashMap>().deserialize(serialize, HashMap.class);
System.out.println("deserialize:" + deserialize);
이번에는 결과가 나오지만 맵은 정렬되지 않았습니다. (저는 HashMap을 사용하고 있기 때문에 생각합니다). 또한 BigDecimal 값은 원래 형식과 같이 표시되지 않습니다.
deserialize:{3=c, 2=b, 1=a, 4=1.0E22}
FlexJSON에는 정렬 된지도에 문제가있는 것으로 보입니다. 이것은 아래 예와 같이 'class'항목을 넣을 방법이 없기 때문에 이것이라고 생각합니다.
"class":"ch.qos.logback.classic.Logger","debugEnabled":true,"errorEnabled":true,"infoEnabled":true}
또는 다른 방법이 있습니다. 아무도 도와 줄 수 있습니까? chubbsondubs에 의해 제안 는 ObjectFactory를 도입 한 후
감사합니다
LinkedHashMap deserialize = new JSONDeserializer<LinkedHashMap>()
.use(LinkedHashMap.class, new ObjectFactory() {
public Object instantiate(ObjectBinder context, Object value, Type targetType, Class targetClass) {
System.out.println("mymap:"value);
}
}).deserialize(serialize, LinkedHashMap.class);
값 객체가 HashMap의 유형을 가지고 있으며 인쇄 :
mymap:{3=c, 2=b, 1=a, [email protected]}
감사하지만지도 정렬이 이미 변경되었습니다. 상단의 편집 된 주석을 확인하십시오. –
ObjectFactory에서 실제로 아무것도하지 않았기 때문입니다. 당신이 쓴 것은 HashMap (순서가 없음)입니다. flexjson은 HashMap을 ObjectFactory가 생성 한 객체에 바인딩하기 전에 파싱합니다. ObjectFactory 내부에서 인스턴스화하고 값을 그 안에 옮겨서 LinkedHashMap으로 변환해야합니다. – chubbsondubs