Jeksonda maxsus ketma-ketlik va deserializatorni qanday yozish mumkin?

Menda o'ndan ortiq xususiyatlarga ega bo'lgan sinf bor. Ibtidoiy turdagi xususiyatlarning aksariyati uchun, men BeanSerializer va BeanDeserializer-ni yozishni xohlayman yoki nima kerak bo'lsa, yozish kerak bo'lgan noqulay kodni qisqartirishga umid qilaman. Maxsus va arraylarning boshqa xususiyatlari uchun ba'zi bir maxsus ketma-ketliklashtiruvchi/deserializer qilishni xohlayman. Eslatib o'tamizki, JSON stragini o'zgartira olmayapman. Lekin Android kodiga to'liq kirishim bor. Jekson 1.7.9/Ektorp 1.1.1 dan foydalanayapman.

BeanDeserializerni sinxronlashtiramanmi? Men bunga duch kelganman. Parametrlarga ega bo'lmagan standart konstruktorni kutadi, lekin super konstruktorni qanday chaqirishni bilmayman.

class MyType{
   //a dozen properties with primitive types String, Int, BigDecimal
    public Stirng getName();
    public void setName(String name);

   //properties that require custom deserializer/serializer
    public CustomType getCustom();
    public void setCustom(CustomType ct);
}

class MyDeserializer extends BeanDeserialzer{
   //an exception is throw if I don't have default constructor.
   //But BeanDeserializer doesn't have a default constructor
   //It has the below constructor that I don't know how to fill in the parameters
    public MyDeserializer(AnnotatedClass forClass, JavaType type,
        BeanProperty property, CreatorContainer creators,
        BeanPropertyMap properties,
        Map backRefs,
        HashSet ignorableProps, boolean ignoreAllUnknown,
        SettableAnyProperty anySetter) {
    super(forClass, type, property, creators, properties, backRefs, ignorableProps,
            ignoreAllUnknown, anySetter);
}
    @Override
    public Object deserialize(JsonParser jp, DeserializationContext dc, Object bean)
        throws IOException, JsonProcessingException {
    super.deserialize(jp, dc, bean);
        MyType c = (MyType)bean;        

            ObjectMapper mapper = new ObjectMapper();

            JsonNode rootNode = mapper.readValue(jp, JsonNode.class);
           //Use tree model to construct custom
           //Is it inefficient because it needs a second pass to the JSON string to construct the tree?
            c.setCustom(custom);
            return c;
}
}

Men Google-ni izladim, lekin biron-bir foydali misolni/ta'limi topa olmadim. Agar kimdir menga ajoyib ish qiladigan misollar yuborishi mumkin bo'lsa! Rahmat!

7

1 javoblar

BeanSerializer/-Deserializer sub-klassiga Jeksonning yangi versiyasini ishlatish yaxshiroq bo'lar edi, chunki bu hudud BeanSerializerModifier va BeanDeserializerModifier orqali ochiq-oydin qo'llab-quvvatlangani tufayli takomillashtirildi.

Biroq, ishonch hosil qilish uchun, shuningdek, alohida xususiyatlarga ishlatilishi uchun maxsus ketma-ketlik/deserializerni ham belgilashingiz mumkin:

class Foo {
   @JsonSerialize(using=MySerializer.class)
   public OddType getValue();
}
4
qo'shib qo'ydi
1,8 1,7 ga nisbatan yaxshiroq bo'lishi mumkin, shuning uchun u aslida ishlaydi. BeanSerializerModifierni foydalanib, siz aslida BeanSerializerni bekor qilmaysiz, lekin ayni paytda maxsus misollar yaratishingiz mumkin, ammo boshqa rekvizitlarni standart sozlamalarga o'tkazib qo'yishingiz mumkin. Bundan tashqari, sizning maxsus serializers 'resol ()' usulida (agar siz ResolvableSerializerni qo'llayotgan bo'lsangiz, BeanSerializer qanday bajarilganiga o'xshash) standartlarni qidirishingiz mumkin. Ideal holda, past-klassdagi BeanSerializersdan iloji bo'lsa, oddiylik uchun; ammo agar siz pastki sinfga kerak bo'lsa, bu ham qo'llab-quvvatlanadigan texnikadir.
qo'shib qo'ydi muallif StaxMan, manba
Qo'l bilan ochilmaslik qiyin. va Bean (De) SerializerModifier, albatta, rivojlangan foydalanish usuli hisoblanadi. Omad!
qo'shib qo'ydi muallif StaxMan, manba
Siz haqsiz. Yozuv shrifti tiklandi, rahmat!
qo'shib qo'ydi muallif StaxMan, manba
Buni @JsonSerialize (oxirida r yo'q) bo'lishi kerak.
qo'shib qo'ydi muallif Frans, manba
Fikr uchun tashakkur! Buni ishlash uchun harakat qilaman. Android uchun Ektorp-dan foydalanayapman va ular 1.1.1 ni taklif qiladi, shuning uchun men Jekson 1.7.9 dan foydalanmoqdaman. Lekin agar yangilanishim bo'lsa, u ishlashi mumkin.
qo'shib qo'ydi muallif PokerIncome.com, manba
eng yuqori versiya - 1,8,5. Har qanday taklif bormi? Sizning JsonSerializer fikringizni OddType-da sinab ko'rmoqchiman.
qo'shib qo'ydi muallif PokerIncome.com, manba
g'oya uchun yana bir rahmat! Men asosan JsonUnwrapped (1,9 xususiyat) 1.8.5 bilan serialize/seriyali amalga oshirishni xohlayman. Eng oddiy yo'l nima? BeanSerializerModifier'dan qanday foydalanishni tushunish qiyin. Sizda biron bir misol yoki hujjat bormi? Katta rahmat!
qo'shib qo'ydi muallif PokerIncome.com, manba
Ushbu misolni ishlatish va JsonDeserializer ni har bir mulkni o'z-o'zidan seriyalash uchun kengaytirmoqda. Yozish uchun noqulay ko'rinadi, ammo men hozir biladigan yagona usul! javasourcecode.org/html/open-source/jackson/jackson-1.8.5/or‌ g/& hellip;
qo'shib qo'ydi muallif PokerIncome.com, manba
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb