Gson:如何从没有注释的序列化中排除特定字段

问题:

我正在尝试学习Gson,我正在努力寻找现场排除。这是我的课

public class Student {    
  private Long                id;
  private String              firstName        = "Philip";
  private String              middleName       = "J.";
  private String              initials         = "P.F";
  private String              lastName         = "Fry";
  private Country             country;
  private Country             countryOfBirth;
}

public class Country {    
  private Long                id;
  private String              name;
  private Object              other;
}

我可以使用GsonBuilder并为firstNamecountry之类的字段名称添加一个ExclusionStrategy,但我似乎无法排除某些字段的属性country.name
使用方法public boolean shouldSkipField(FieldAttributes fa),FieldAttributes不包含足够的信息来匹配该字段与country.name之类的过滤器
我希望有任何帮助解决这个问题的解决方案。
P.S:我想避免注释,因为我想改进这一点,并使用RegEx过滤字段。
谢谢
 编辑:我试图看看是否可以模拟Struts2 JSON plugin的行为
使用Gson

<interceptor-ref name="json">
  <param name="enableSMD">true</param>
  <param name="excludeProperties">
    login.password,
    studentList.*\.sin
  </param>
</interceptor-ref>

 编辑:
    我重新打开了这个问题,补充说:
我添加了相同类型的第二个字段来进一步澄清这个问题。基本上我想排除country.name但不排除countrOfBirth.name。我也不想排除国家作为一种类型。
所以类型是相同的,它是对象图中我想要确定和排除的实际位置。

回答:

任何你不想序列化的字段一般你应该使用“transient”修饰符,这也适用于json序列化器(至少它与我使用过的一些,包括gson)。
如果你不想在序列化的json中显示名称给它一个暂时的关键字,例如:

private transient String name;

 More details in the Gson documentation

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Gson: How to exclude specific fields from Serialization without annotations

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

66 − 60 =