Gson序列化错误类com.activeandroid.DatabaseHelper声明了多个名为mContext的JSON字段

时间:2013-03-12 04:34:08

标签: android gson resttemplate android-annotations activeandroid

我得到的错误是“java.lang.IllegalArgumentException:class com.activeandroid.DatabaseHelper声明了多个名为mContext的JSON字段”

我正在使用AndroidAnnotations RestClient从我的Web服务中提取数据并序列化为POJO。使用ORMLite时序列化工作正常,但我最近决定试用Active Android,现在我的类扩展了Model。 Gson正在序列化我无法控制的父类。任何方式我只能包含某些字段,或者只是从RestClient返回普通的JSON并以不同的方式进行序列化

@Rest(rootUrl = "http://stuff...com", converters = { GsonHttpMessageConverter.class })
    public interface RestClient {
    @Get("/AndroidController/createFacebookUser?facebookToken={facebookToken}&catIds=    {catIds}")
    User createFacebookUser(String facebookToken,String catIds);
}

,用户模型

@Data
@Table(name = "Users")
public class User extends Model {
@Column(name = "SystemID")
private String systemID;
@Column(name = "Name")
private String name;
public List<GameEntry> items() {
    return getMany(GameEntry.class, "Category");
}

public User(){}

}

2 个答案:

答案 0 :(得分:7)

Gson提供了多种方法,可以从序列化和反序列化中排除字段和类型。请查看Excluding Fields From Serialization and Deserialization,特别是@Expose注释和用户定义ExclusionStrategy的使用情况。

答案 1 :(得分:4)

我创建了自己的Serializer,它根据这里的答案扩展了AbstractHttpMessageConverter

Custom HttpMessageConverter with @ResponseBody to do Json things

我唯一改变的是我制作了Gson并在我希望序列化的字段上使用@Expose

private Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();