GsonBuilder用法笔记


Alt Text

  • public GsonBuilder setFieldNamingStrategy(FieldNamingStrategy fieldNamingStrategy)

    1
    2
    3
    public interface FieldNamingStrategy {
    String translateName(Field var1);
    }

    通过查看上面的接口可以看出来,这是传进去字段在生成json的时候改名字用的。

  • public GsonBuilder excludeFieldsWithModifiers(int… modifiers)
    这个方法的作用是gson转换的时候排除掉指定的修饰符Modifiers,可选的类型从java.lang.reflect.Modifier中得到,可以是Modifier.PUBLIC这个单个修饰符,也可以是Modifier.fieldModifiers()这样的组合修饰符。

    1
    2
    3
    public static int fieldModifiers() {
    return PUBLIC | PROTECTED | PRIVATE | STATIC | FINAL | TRANSIENT | VOLATILE;
    }

    比如private等不输出为json,比如:

    1
    2
    GsonBuilder excludeFieldsWithModifiers = gsonBuilder.excludeFieldsWithModifiers(Modifier.PRIVATE); Gson create = excludeFieldsWithModifiers.create();
    String json2 = create.toJson(new Developer());
  • public GsonBuilder excludeFieldsWithoutExposeAnnotation()
    这个方法表示解析的时候去掉JavaBean中没有@Expose注解的字段

  • public GsonBuilder addDeserializationExclusionStrategy(ExclusionStrategy strategy)
    gson反序列化时采用的策略。
    ExclusionStrategy的代码如下:

    1
    2
    3
    4
    public interface ExclusionStrategy {
    boolean shouldSkipField(FieldAttributes var1);
    boolean shouldSkipClass(Class< ?> var1);
    }

    这两个方法返回值,来判断是否反序列化。

  • public GsonBuilder addSerializationExclusionStrategy(ExclusionStrategy strategy)
    与上面的逻辑类似。

  • public GsonBuilder disableHtmlEscaping()
    Gson使用时将一些字符自动转换为Unicode转义字符,比如把{"s":"< "}转换成{"s":"\u003c"},调用disableHtmlEscaping以后就不会自动转换了。
  • public GsonBuilder setDateFormat(String pattern)
    格式化Date类型数据时候的pattern,底层是SimpleDateFormat来操作的。

  • public GsonBuilder setDateFormat(int style)
    style从java.text.DateFormat中取

  • public GsonBuilder setDateFormat(int dateStyle, int timeStyle)
    与上面类似

  • public GsonBuilder registerTypeAdapter(Type type, Object typeAdapter)
    自定义序列化和反序列化的适配器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        public GsonBuilder registerTypeAdapter(Type type, Object typeAdapter) {
    $Gson$Preconditions.checkArgument(typeAdapter instanceof JsonSerializer<?>
    || typeAdapter instanceof JsonDeserializer< ?>
    || typeAdapter instanceof InstanceCreator< ?>
    || typeAdapter instanceof TypeAdapter< ?>);
    if (typeAdapter instanceof InstanceCreator< ?>) {
    instanceCreators.put(type, (InstanceCreator) typeAdapter);
    }
    if (typeAdapter instanceof JsonSerializer< ?> || typeAdapter instanceof JsonDeserializer< ?>) {
    TypeToken< ?> typeToken = TypeToken.get(type);
    factories.add(TreeTypeAdapter.newFactoryWithMatchRawType(typeToken, typeAdapter));
    }
    if (typeAdapter instanceof TypeAdapter< ?>) {
    factories.add(TypeAdapters.newFactory(TypeToken.get(type), (TypeAdapter)typeAdapter));
    }
    return this;
    }
  • public GsonBuilder setLongSerializationPolicy(LongSerializationPolicy serializationPolicy)
    设置对Long类型的变量,是解析成字符串还是解析为long类型,可以这样设置如下:Gson gson = newGsonBuilder. setLongSerializationPolicy(LongSerializationPolicy.DEFAULT).create(),其中LongSerializationPolicy.DEFAULT为默认值,Long类型转换为Long型,LongSerializationPolicy.STRING为字符串型,就是把Long类型的值强制转换为字符串类型。

  • public GsonBuilder setFieldNamingPolicy(FieldNamingPolicy namingConvention)
    如果设置FieldNamingPolicy.UPPER_CAMEL_CASE),会把字段首字母大写,注:对于实体上使用了@SerializedName注解的不会生效.

  • public GsonBuilder generateNonExecutableJson()
    官方的说法是: Makes the output JSON non-executable in Javascript by prefixing the generated JSON with some special text。就是说在json前面加些特殊的文本,使其不能在Javascript中不能运行的json。

  • public GsonBuilder setPrettyPrinting()
    生成格式化后的json。

文章目录