我正在尝试序列化一个对象。我有以下结构:
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 库来完成此任务。 我想在与服务器交互时删除额外的键值对。 我该怎么做?
答案 0 :(得分:0)
以这种方式更改您的Serialize类。
public class A implements Serializable{
String aField1;
String aField2;
B bObj;
class B{
String bField1;
String bField2;
String bField3;
}
}
只需删除多余的字段即可。它不会有任何问题。
答案 1 :(得分:0)
您可以将bField2
和bField3
标记为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;
}
}
);