আমার পরিস্থিতিতে আমার একটি "মডেল" রয়েছে, একটি বাদে বেশ কয়েকটি স্ট্রিং প্যারামিটার থাকে: এটি বাইট অ্যারে 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[]
Base64
Adapter
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
চাপ দেওয়া।