Gson删除不必要的嵌套对象字段

时间:2016-05-31 12:44:02

标签: android serialization gson deserialization

我正在尝试序列化一个对象。我有以下结构:

Class A{
String aField1;
String aField2;
B bObj;
}
Class B{
String bField1;
String bField2;
String bField3;    
}

我正在尝试序列化A类和B类对象以将它们发送到服务器。 当我序列化 A类对象时,它给了我

{
 aField1: "abc",
 aField2: "def",
 B: {
    bField1: "mnp",
    bField2: "qrt",
    bField3: "xyz",
    }
}

序列化 B类 obj:

{
 bField1: "mnp",
 bField2: "qrt",
 bField3: "xyz",
}

但我想要 Class A 这样的对象:

{
 aField1: "abc",
 aField2: "def",
 B: {
    bField1: "mnp"
    }
}

我目前正在使用 GSON 库来完成此任务。 我想在与服务器交互时删除额外的键值对。 我该怎么做?

2 个答案:

答案 0 :(得分:0)

以这种方式更改您的Serialize类。

public class A implements Serializable{
    String aField1;
    String aField2;
    B bObj;

    class B{
        String bField1;
        String bField2;
        String bField3;
    }
}

只需删除多余的字段即可。它不会有任何问题。

答案 1 :(得分:0)

您可以将bField2bField3标记为transient或使用注释@Expose(serialize = false)

或者您可以自定义序列化排除策略 示例代码:

GsonBuilder builder = new GsonBuilder();
Type type = new TypeToken <A>(){}.getType();
builder.addSerializationExclusionStrategy(
        new ExclusionStrategy() {
            @Override
            public boolean shouldSkipField(FieldAttributes fieldAttributes) {
                return fieldAttributes.getName().equals("bField2") ||
                            fieldAttributes.getName().equals("bField3");
            }
            @Override
            public boolean shouldSkipClass(Class<?> aClass) {
                return false;
            }
        }
);