আমার পরিস্থিতিতে আমার একটি "মডেল" রয়েছে, একটি বাদে বেশ কয়েকটি স্ট্রিং প্যারামিটার থাকে: এটি বাইট অ্যারে byte[]। কিছু কোড স্নিপেট:
String response = args[0].toString();
Gson gson = new Gson();
BaseModel responseModel = gson.fromJson(response, BaseModel.class);
উপরের শেষ লাইনটি যখন
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column
আলোড়ন সৃষ্টি হয়. এসও এর মাধ্যমে অনুসন্ধান করে, আমি বুঝতে পেরেছিলাম যে Adapterআমার BaseModelকাছে জেসনঅবজেক্টে রূপান্তর করতে আমার কিছু ফর্ম থাকা দরকার। একটি মডেল মিশ্রিত করা Stringএবং byte[]জিনিস জটিল করে তোলে। দৃশ্যত,Gson পরিস্থিতিটি আসলে পছন্দ করবেন না।
আমি ফর্ম্যাটে রূপান্তরিত হয় Adapterতা নিশ্চিত করার জন্য একটি তৈরি শেষ করি । এখানে আমার ক্লাস:byte[]Base64Adapter
public class ByteArrayToBase64Adapter implements JsonSerializer<byte[]>, JsonDeserializer<byte[]> {
@Override
public byte[] deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return Base64.decode(json.getAsString(), Base64.NO_WRAP);
}
@Override
public JsonElement serialize(byte[] src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(Base64.encodeToString(src, Base64.NO_WRAP));
}
}
জেএসএনওজেক্টকে মডেলে রূপান্তর করতে, আমি নিম্নলিখিতটি ব্যবহার করেছি:
Gson customGson = new GsonBuilder().registerTypeHierarchyAdapter(byte[].class, new ByteArrayToBase64Adapter()).create();
BaseModel responseModel = customGson.fromJson(response, BaseModel.class);
একইভাবে, মডেলটিকে JSONObject এ রূপান্তর করতে, আমি নিম্নলিখিতটি ব্যবহার করেছি:
Gson customGson = new GsonBuilder().registerTypeHierarchyAdapter(byte[].class, new ByteArrayToBase64Adapter()).create();
String responseJSon = customGson.toJson(response);
কোডটি যা করছে তা মূলত যখনই / জেএসওএনজেক্টে রূপান্তরকালে মুখোমুখি হয় তখনই উদ্দেশ্যযুক্ত class/object(এই ক্ষেত্রে, byte[]শ্রেণি) মাধ্যমে Adapterচাপ দেওয়া।