내 상황에서는 하나를 제외하고 여러 문자열 매개 변수로 구성된 "모델"이 있습니다 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
트리거됩니다. SO를 통해 검색하면서 JsonObject로 또는 이리저리 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));
}
}
JSONObject를 모델로 변환하기 위해 다음을 사용했습니다.
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
JSONObject로 /로 변환하는 동안 발생할 때마다 입니다.