将数组从json转换为object时出现问题。例外情况是:预期名称,但在第1行第492行是BEGIN_OBJECT
我搜索了论坛,但对于我发现的案例,没有人帮助解决这个问题。
这是将要解析的核对表:http://pastebin.com/9kyk6hmu
这个JSON与通过Gson对象本身生成的JSON相同,我把它们放在winmerge中以检查是否有任何错误而且没有。
这就是我转换为Json的方式:
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapterFactory(new ChecklistItemConverterAdapterFactory());
Gson convert = builder.excludeFieldsWithoutExposeAnnotation().create();
return convert.toJson(actvChecklist);
转换回清单对象:
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapterFactory(new ChecklistItemConverterAdapterFactory());
Gson convert = builder.excludeFieldsWithoutExposeAnnotation().create();
CheckList answeredChecklist = convert.fromJson(checkListAnswer, CheckList.class);
完整筹码位于:http://pastebin.com/vhLGG0mV
是否还需要进行其他配置才能使此转换正常工作?
这是转换器curstom适配器工厂:
public class ChecklistItemConverterAdapterFactory implements TypeAdapterFactory {
@Override
public <T> TypeAdapter<T> create(final Gson gson, TypeToken<T> type) {
Class<? super T> rawType = type.getRawType();
if (rawType == CheckListItemFileType.class) {
return new checklistItemFileTypeAdapter<>();
}
return null;
}
public class checklistItemFileTypeAdapter<T> extends TypeAdapter<T> {
@Override
public void write(JsonWriter out, T value) throws IOException {
if (value == null) {
out.nullValue();
return;
}
CheckListItemFileType fileType = (CheckListItemFileType) value;
// Here write what you want to the JsonWriter.
out.beginObject();
out.name("value");
out.value(fileType.name());
out.name("pattern");
out.value(fileType.getPattern());
out.endObject();
}
@Override
public T read(JsonReader in) throws IOException {
return null;
}
}