将对象反序列化为纯字符串

时间:2014-06-12 17:15:36

标签: java gson

是否可以将json反序列化为POJO,而某些子对象仍然是json字符串?例如:

{
  a_num: 5,
  an_object : { ... },
  a_string: "a cool string"
}

到POJO:

int a_num;
//instead of: ObjectType an_object;
String an_object;
String a_string;

2 个答案:

答案 0 :(得分:1)

您可以为gson api编写自定义反序列化程序,以便实现JsonDeserializer

例如:

public class MyClass implements JsonDeserializer<MyClass>{

//fields and constructor

@Override
public MyClass deserialize(JsonElement json, Type type,
        JsonDeserializationContext context) throws JsonParseException {

    JsonObject jobject = (JsonObject) json;

    return new MyClass(
            jobject.get("a_num").getAsInt(), 
            jobject.get("an_object").getAsString(),
            jobject.get("a_string").getAsString() 
    );
}
}

答案 1 :(得分:0)

根据Jigar的回答,我可以为这个问题推断出一个更简单的解决方案。

保存映射每个变量的时间的一种非常简单的方法是为字符串类编写反序列化器,然后将所需变量声明为字符串。

public class StringDeserializer implements JsonDeserializer<String> {

    @Override
    public String deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
        return jsonElement.toString();
    }
}

使用以下POJO:

int a_num;
String an_object;
String a_string;

最后注册TypeAdapter:

private static Gson gson = new GsonBuilder()
  .registerTypeAdapter(String.class, new StringDeserializer()).create();

使用此反序列化器,可以将所需的任何字段反序列化为字符串。只需将其键入POJO中的字符串即可。