মোশি ১.৯.১ কোটলিন ধরণের সিরিয়ালাইজ করতে পারবেন না


12

আমার কাছে মোশি ১.৮.০ ব্যবহার করে ডেটারিয়ালাইজিং / ডেজারিয়ালাইজিং ডেটা রয়েছে working

১.৯.১-তে আপগ্রেড করা এখন সিরিয়ালাইজ করার চেষ্টা করার সময় ক্রাশের দিকে নিয়ে যায়:

java.lang.IllegalArgumentException: কোটলিন টাইপ com.xxx.Spot সিরিয়াল করা যায় না। কোটলিন-প্রতিবিম্ব ব্যবহার না করেই কোটলিন শ্রেণির প্রতিফলিত সিরিয়ালাইজেশন অনির্ধারিত এবং অপ্রত্যাশিত আচরণ করেছে। দয়া করে মশি-কোটলিন আর্টিক্ট থেকে কোটলিনজসন অ্যাডাপ্টার ব্যবহার করুন বা মশি-কোটলিন-কোডজেন আর্টিক্ট থেকে কোড জেন ব্যবহার করুন।

সিরিয়ালাইজার কোডটি এখানে:

val moshi = Moshi.Builder().build()
val dataListType = newParameterizedType(List::class.java, T::class.java)
val adapter: JsonAdapter<List<T>> = moshi.adapter(dataListType)
val json = adapter.toJson(dataList)

এবং সংশ্লিষ্ট টি ক্লাস হয়

@IgnoreExtraProperties
data class Spot(
    var id: String = "",
    var localizedName: String? = null,
    var type: String = "",
    var location: Location? = null
)

আমি এখানে কী করব সে সম্পর্কে সম্পূর্ণ নির্বোধ।

সাহায্যের জন্য ধন্যবাদ!


আপনি যে নির্ভরতাগুলি ব্যবহার করছেন তা আমাদের তা দেখান
কর্টিনডিজপ্যাচার

উত্তর:


14

আপনার ডেটা ক্লাসের আগে আপনাকে @ জসনক্লাস (জেনারেটএডাপ্টার = সত্য) যুক্ত করতে হবে

@JsonClass(generateAdapter = true) 
data class Spot(
    var id: String = "",
    var localizedName: String? = null,
    var type: String = "",
    var location: Location? = null
)

2
কেন এটি প্রয়োজন?
মর্টেন হল্মগার্ড

5
... এবং আপনার বিল্ডে সম্পর্কিত ক্যাপ্ট কনফিগারেশন অন্তর্ভুক্ত করুন। বিশদটি
জেসি উইলসন

1
ধন্যবাদ, এটি কাজ করেছে! @ জেসনক্লাস যোগ করা (জেনারেটএডাপ্টার = সত্য) + গ্রেডের প্রয়োগটি 'মশি' থেকে 'মশি-কোটলিন' এ পরিবর্তন করা + ক্যাপ্ট কৌশলটি করেছে
lorenzo

0

আপনি ওয়াইল্ড কার্ডগুলি ব্যবহার করে দমন করতে পারেন @JvmSuppressWildcards

এটার মত

val adapter: JsonAdapter<List<@JvmSuppressWildcards T>> = moshi.adapter(dataListType)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.