Java Gson需要一个名称,但在第1行第492列是BEGIN_对象
我在将数组从json转换为对象时遇到问题。例外情况是:应为名称,但在第1行第492列为BEGIN_对象 我搜索了论坛,但对于我发现的案例,没有一个有助于解决这个问题 这是将要分析的检查表: 这个JSON与通过Gson对象本身生成的JSON相同,我将两者都放在winmerge中,以检查是否有任何错误 这就是我如何转换为Json的方式:Java Gson需要一个名称,但在第1行第492列是BEGIN_对象,java,json,gson,Java,Json,Gson,我在将数组从json转换为对象时遇到问题。例外情况是:应为名称,但在第1行第492列为BEGIN_对象 我搜索了论坛,但对于我发现的案例,没有一个有助于解决这个问题 这是将要分析的检查表: 这个JSON与通过Gson对象本身生成的JSON相同,我将两者都放在winmerge中,以检查是否有任何错误 这就是我如何转换为Json的方式: GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapterFactor
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);
完整堆栈如下所示:
为了使此转换正常工作,是否需要进行任何进一步的配置
这是转换器适配器工厂:
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;
}
}
公共类ChecklistItemConverterAdapterFactory实现TypeAdapterFactory{
@凌驾
公共类型适配器创建(最终Gson Gson,类型令牌类型){
ClassYour adapter可能没有对称地进行序列化/反序列化。我没有对读取部分给予足够的关注,我正在进行一些搜索,以找出如何正确创建它,因为它是一个复杂的对象。是的,问题完全在适配器中,在我实现缺少的部分后,它才起作用。