2015-03-11 6 views
5

बन जाता है मैं जैक्सन का उपयोग कर रहा हूं ताकि एक बड़ी जेसन स्ट्रिंग को विभिन्न वर्गों और उप-वर्गों में परिवर्तित किया जा सके।जेएसओएन के पॉलिमॉर्फिक deserialization, संपत्ति का प्रकार "शून्य"

मेरे पास ऑब्जेक्ट्स की एक सूची है, प्रत्येक में नोड ऑब्जेक्ट, अंतिम परिणाम ऑब्जेक्ट और एक बच्चों की सरणी है। बच्चों के सरणी में वही सेटअप के साथ वस्तुओं की एक सूची होती है। यह 3 या 4 परतों के लिए चला जाता है।

प्रत्येक परतों का नोड एक अलग सबक्लास का होता है, जो सभी नोड सुपरक्लास से विस्तारित होता है। मैं निम्नलिखित एनोटेशन के साथ सुपर क्लास नोड टिप्पणी किए गए:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") 
@JsonSubTypes({ 
    @JsonSubTypes.Type(value = Type1ResponseDto.class, name = "Type1"), 
    @JsonSubTypes.Type(value = Type2ResponseDto.class, name = "Type2"), 
    @JsonSubTypes.Type(value = Type3ResponseDto.class, name = "Type3"), 
    @JsonSubTypes.Type(value = Type4ResponseDto.class, name = "Type4"), 
    @JsonSubTypes.Type(value = Type5ResponseDto.class, name = "Type5") 
}) 

यह काम करने के लिए, के बाद से सभी उपवर्गों मैप किया गया हो रहा है।

हालांकि, किसी भी तरह से "प्रकार" संपत्ति को शून्य पर सेट किया जा रहा है।

ऐसा कोई विचार क्यों है कि ऐसा क्यों होता है?

उत्तर

7

मैं प्रकार संपत्ति के लिए visible=true जोड़ने के लिए दिखाने के लिए की जरूरत:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type",visible = true) 
@JsonSubTypes({ 
    @JsonSubTypes.Type(value = Type1ResponseDto.class,name = "Type1"), 
    @JsonSubTypes.Type(value = Type2ResponseDto.class, name = "Type2"), 
    @JsonSubTypes.Type(value = Type3ResponseDto.class, name = "Type3"), 
    @JsonSubTypes.Type(value = Type4ResponseDto.class, name = "Type4") 
}) 
+0

जैक्सन का कौन सा संस्करण इस जवाब देने के लिए लागू होता है? मैं 1.9.9 का उपयोग कर रहा हूं और मेरे पास ये विकल्प नहीं हैं, और मुझे यह सही समस्या है। – TheIcemanCometh

+0

2.5.1 @TheIcemanCometh –

संबंधित मुद्दे