java - 阻止 GSON 序列化 JSON 字符串

标签 java json serialization gson

我是 gson 的新手,有一个我还没有找到答案的 newby 问题,所以请多多包涵。 StackOverflow 和谷歌不是我的 friend :(

我有一个 java 类“User”,它的属性之一“externalProfile”是一个包含已序列化 JSON 的 Java 字符串。当 gson 序列化 User 对象时,它会将 externalProfile 视为原始类型,从而转义 JSON 添加额外的斜杠等。 我希望 gson 单独保留字符串,只是“按原样”使用它,因为它已经是有效且可用的 JSON。

为了区分 JSON 字符串,我创建了一个名为 JSONString 的简单类,我尝试使用读取器/写入器、registerTypeAdapter,但没有任何效果。 你能帮帮我吗?

public class User {
    private JSONString externalProfile;
    public void setExternalProfile(JSONString externalProfile) { this.externalProfile = externalProfile; }

}

public final class JSONString {
    private String simpleString;
    public JSONString(String simpleString) { this.simpleString = simpleString; }
}

public customJsonBuilder(Object object) {
    GsonBuilder builder = new GsonBuilder();
        builder.registerTypeAdapter(GregorianCalendar.class, new JsonSerializer<GregorianCalendar>() {
            public JsonElement serialize(GregorianCalendar src, Type type, JsonSerializationContext context) {
                if (src == null) {
                    return null;
                }
                return new JsonPrimitive(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(src.getTime()));
            }
        });
        Gson gson = builder.create();
        return gson.toJson(object);
}

例如,externalProfile 将包含(作为字符串值):

{"profile":{"registrationNumber": 11111}}

在我将其作为 JSONString 存储在 User 对象中之后,我们将用户对象转换为 JSON:

User user = new User();
user.setExternalProfile(new JSONString(externalProfile)),  
String json = customJsonBuilder(user);

json 将包含如下内容:

{\"profile\":{\"registrationNumber\": 11111}}

因此,externalProfile JSONString 被 gson 序列化为 String primitive,在双引号前面添加了额外的斜杠。 我希望 gson 保留此 JSONString 原样,因为它已经是可用的 JSON。 我正在寻找类型适配器/读写器来执行此操作,但我无法让它工作。

最佳答案

正如 Alexis C 所说:

首先将 externalProfile 存储为 JsonObject:

new Gson().fromJson(externalProfile, JsonObject.class));

并且让gson在输出User对象的时候再序列化这个。 将产生完全相同的 JSON!

关于java - 阻止 GSON 序列化 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30816176/

相关文章:

php - 从数据库检索时序列化数组中断

java - 比 Box 更高效的布局

json - 如何将 google Geocoding API 结果映射到简单的城市、地区、国家

java - 在android中解析简单的json字符串

java - jackson 序列化即时到纳秒问题

javascript - 克隆的方法在哪里

java - 使用多个模式时,如何在 match.find() 之后查找当前用于模式匹配的正则表达式?

java - 如何在 Spring Boot 中使用 Hibernate/JPA 返回多级 json

java - 向我的基本 'Sound Adventure'游戏添加声音

java - 从 JSONObjects 字符串构建 JSONobjects 的 JSONArray?