【问题标题】:is it possible to Change the json name of fields of a class by annotating the object of the class instead of annotating the fields是否可以通过注释类的对象而不是注释字段来更改类的字段的json名称
【发布时间】:2019-10-21 04:22:39
【问题描述】:
Gson gson = gsonBuilder.create();
String json = gson.toJson(obj);

这个对象包含一对。当它转换为 json 时,它的值显示为:

_first : 1.0 , _秒:2.0

我想将变量 first 和 second 的名称更改为某个字符串。

我可以使用对象上的注释来更改字段的名称吗 例如

    class one {

    @SerializedName("number")
    int num ;

    @Some annotation to change the name of field one and field two
    Pair<Double,Double> var;

    Pair<String,Integer> var2;
    }

    class Pair<T1,T2>{

    T1 field_1;
    T2 field_2;
}

【问题讨论】:

  • 能否提供实例为obj的类的代码?
  • 类示例{ int num ; pair 标记 }
  • 好的,这是一堂课。 obj 是什么?
  • 我已经通过了这个类的对象
  • @HeenaMittal,默认情况下没有注释可以做到这一点。您需要为整个 One 类编写自定义序列化程序,并为 Pair 内部字段提供自定义名称。目前最简单的解决方案可能是使用 Map&lt;String, Object&gt; 并提供您需要的键和值。

标签: java json serialization gson


【解决方案1】:

我使用自定义序列化器来解决这个问题:

gsonBuilder.registerTypeAdapter(Pair.class, new PairCustomSerializer());

public class PairCustomSerializer implements JsonSerializer<Pair<?, ?>> {

        @Override
        public JsonElement serialize(Pair<?, ?> src, Type typeOfSrc, JsonSerializationContext context) {
            JsonObject obj = new JsonObject();
            JsonArray arr = new JsonArray();
            if (src.getFirst() instanceof Double) {
                Double val1 = (Double) src.getFirst();
                Double val2 = (Double) src.getSecond();
                arr.add(val1);
                arr.add(val2);
                obj.add("value", arr);
                return obj;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多