এটি @SerializedName
জিসন-এর কোনও ক্ষেত্রে একাধিক টীকাগুলি সংজ্ঞায়িত করতে সমর্থ নয় ।
কারণ: ডিফল্টরূপে ডিসরিয়ালাইজেশন একটি লিংকডহ্যাশম্যাপ দ্বারা পরিচালনা করা হয় এবং কীগুলি আগত জসনের ক্ষেত্রের নামগুলি (কাস্টম শ্রেণীর ক্ষেত্রের নাম বা সিরিয়ালযুক্ত নাম নয়) দ্বারা সংজ্ঞায়িত করা হয় এবং সেখানে একের পর এক ম্যাপিং রয়েছে। আপনি বাস্তবায়ন (কিভাবে deserialization কাজ) দেখতে পারেন ReflectiveTypeAdapterFactory
ক্লাস ভেতরের বর্গ Adapter<T>
এর read(JsonReader in)
পদ্ধতি।
সমাধান:
আপনি একটি কাস্টম লিখতে পারেন TypeAdapter যা হ্যান্ডলগুলি name
, person
এবং user
JSON ট্যাগ এবং তাদেরকে আপনার কাস্টম ক্লাসের নামের ক্ষেত্রে মানচিত্র MyClass
:
class MyClassTypeAdapter extends TypeAdapter<MyClass> {
@Override
public MyClass read(final JsonReader in) throws IOException {
final MyClass myClassInstance = new MyClass();
in.beginObject();
while (in.hasNext()) {
String jsonTag = in.nextName();
if ("id".equals(jsonTag)) {
myClassInstance.id = in.nextInt();
} else if ("name".equals(jsonTag)
|| "person".equals(jsonTag)
|| "user".equals(jsonTag)) {
myClassInstance.name = in.nextString();
}
}
in.endObject();
return myClassInstance;
}
@Override
public void write(final JsonWriter out, final MyClass myClassInstance)
throws IOException {
out.beginObject();
out.name("id").value(myClassInstance.id);
out.name("name").value(myClassInstance.name);
out.endObject();
}
}
পরীক্ষা ক্ষেত্রে:
String jsonVal0 = "{\"id\": 5382, \"user\": \"Mary\" }";
String jsonVal1 = "{\"id\": 2341, \"person\": \"Bob\"}";
final GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(MyClass.class, new MyClassTypeAdapter());
final Gson gson = gsonBuilder.create();
MyClass myClassInstance0 = gson.fromJson(jsonVal0, MyClass.class);
MyClass myClassInstance1 = gson.fromJson(jsonVal1, MyClass.class);
System.out.println("jsonVal0 :" + gson.toJson(myClassInstance0));
// output: jsonVal0 :{"id":5382,"name":"Mary"}
System.out.println("jsonVal1 :" + gson.toJson(myClassInstance1));
// output: jsonVal1 :{"id":2341,"name":"Bob"}
TypeAdapters সম্পর্কে উদাহরণ।
২০১ Edit.০৪.০6 সম্পাদনা করুন: যেহেতু @ ম্যাথিয়ু বর্ণ তার উত্তর লিখেছেন, এটি এখন সমর্থিত। (এটি এই প্রশ্নের সঠিক উত্তর))
পাবলিক অ্যাবস্ট্রাক্ট স্ট্রিং [] বিকল্প
রিটার্নস: ক্ষেত্রটির বিকল্প নাম যখন এটি ডিজাইরিয়াল করা হয়
ডিফল্ট: {}