Хорошо, поэтому из разговора в комментариях я понял, что вы хотите иметь возможность десериализовать оба этих случая:
{
"WARNING_CONDITION_LIST": {
"warningConditionList": {"warningCondition":"BLACK_POSTAL_INK_WF_COND"}
},
...
}
и
{
"WARNING_CONDITION_LIST": ""
...
}
В первом сценарии вы хотите объект, а во втором сценарии вы хотите null
.
Первое, что я заметил, это то, что у вас аннотация @JsonAdapter
не в том месте. На самом деле он должен быть в поле WARNING_CONDITION_LIST
. Примерно так:
public class MS1SystemStatusResponse {
// ...
@SerializedName("WARNING_CONDITION_LIST")
@JsonAdapter(EmptyStringAsNullTypeAdapter.class)
WARNING_CONDITION_LIST warningConditionListMy;
// ...
}
Однако одно это не решит вашу проблему. Проблема в пределах EmptyStringAsNullTypeAdapter
. Он ожидает, что поле будет просто строкой, и не обрабатывает случай, когда он может быть объектом. Для этого мы можем написать следующий адаптер:
public class EmptyStringAsEmptyWarningConditionlTypeAdapter extends TypeAdapter<WARNING_CONDITION_LIST> {
@Override
public void write(JsonWriter out, WARNING_CONDITION_LIST value) throws IOException {
out.beginObject();
out.name("warningConditionList");
out.value(value.warningConditionList.warningCondition);
out.endObject();
}
@Override
public WARNING_CONDITION_LIST read(JsonReader in) throws IOException {
WARNING_CONDITION_LIST result = new WARNING_CONDITION_LIST();
result.warningConditionList = new WarningConditionList();
result.warningConditionList.warningCondition = "";
if (in.peek() == JsonToken.BEGIN_OBJECT) {
in.beginObject();
in.nextName();
in.beginObject();
in.nextName();
result.warningConditionList.warningCondition = in.nextString();
in.endObject();
in.endObject();
} else {
in.nextString();
return null;
}
return result;
}
}
По сути, он проверит, есть ли у вас строка или объект, и вернет null
или объект соответственно.
Это работает только для этих двух случаев, которые я показал вам с помощью json, и должно быть достаточно, чтобы помочь вам разобраться с остальными.
Возможно, вы столкнетесь с аналогичной проблемой с CurrentErrorList
.