Firestore中的序列化/反序列化模型

时间:2018-09-19 20:54:29

标签: android firebase serialization deserialization google-cloud-firestore

我有以下要存储在Firestore中的类。

public class User extends Model {

    @PropertyName("user_auth_id")
    public String authUid;

    @PropertyName("first_name")
    public String firstName;

    @PropertyName("last_name")
    public String lastName;

    @PropertyName("picture_url")
    public String pictureUrl;

    @PropertyName("email")
    public String email;

    @PropertyName("companies")
    public ArrayList<UserCompany> companies;

    public User() {}
}

public class UserCompany extends Model {

public String name;
public String role;
public String position;

public UserCompany() {
    super();
}

public UserCompany(Company company, String role, String position) {
    this();
    name = company.name;
    this.role = role;
    this.position = position;
}

public Map<String, Object> toObject() {
    Map<String, Object> object = new HashMap<>();
    object.put("id", id);
    object.put("name", name);
    object.put("role", role);
    object.put("position", position);
    return object;
}
}

@IgnoreExtraProperties
public class Model {
@Exclude
public String id;

public <T extends Model> T withId(@NonNull final String id) {
    this.id = id;
    return (T) this;
}
}

我想使用交易更新其新创建的公司列表中的用户条目。 (appUser instanceOf User)

transaction.update(userRef, "companies", appUser.companies);

如果这样做,我会得到

  

无效数据。不支持的类型:ro.exemple.model.UserCompany

如何序列化User对象,以便可以将其反序列化

User appUser = queryDocumentSnapshots.getDocuments().get(0).toObject(User.class);

其中的queryDocumentSnapshots是我的Firestore数据库中查询的结果。

我知道我可以从ArrayList更改为HashMap,但我希望保留该List,并尝试对其进行序列化和反序列化,以便在Firestore中获取对象数组。

1 个答案:

答案 0 :(得分:0)

如果进行此序列化,则必须将您的类标记为Serializable。

public UserCompany extends Model implements Serializable
public class User extends Model implements Serializable

还要标记类Model