使用SugarORM和GSON解析字符串id

11

我正在使用 GSON 将一个 json 响应创建成一个 SugarRecord 对象。我使用的 API 返回了一个名为 "id" 的字段,但是 "id" 的类型是字符串,而不是 long(后端正在使用 mongo)。

以下是我正在使用的代码:

Gson gson = new Gson(); // Or use new GsonBuilder().create();
NutritionPlan target = gson.fromJson(jsonObject.getJSONObject("nutrition_day").toString(), NutritionPlan.class);

以下是我的 JSON 响应:

{
"nutrition_day": {
    "id": "5342b4163865660012ab0000",
    "start_on": "2014-04-08",
    "protein_target": 157,
    "sodium_limit": 2000
}

有没有一个好的方法来处理这种情况?我已经尝试过

@Ignore 
long id;

@SerializedName("id")
String nutrition_plan_id;

在我的模型中,但都没有起到帮助作用。有没有人熟悉Sugar ORM,并且知道如何处理不是长整型的id字段?


为什么不将 long id 从你的模型中移除? - CQM
尝试过了。id的长类型自动来自SugarRecord。我正在尝试覆盖它并将其更改为字符串类型。 - coder
6个回答

4

将字符串中的关键字"id"替换为"nutrition_day_id"。您可以使用id json和id sql。

jsonObject.getJSONObject("nutrition_day").toString().replace("\"id\"","\"nutrition_day_id\"")

1
它帮助我将id名称更改为mid,并在所有需要序列化的字段上添加注释@Expose,并在新的id字段上添加注释@SerializedName
@SerializedName("id")
@Expose
private final String mid;

@Expose
private final String street;

1
没有必要进行大的更改。
只需在Long类型之前使用transient语句。
    @SerializedName("id")
    @Expose
    private transient Long id;

然后,如果你有 getIdsetId 方法,应该将它们删除。
祝玩得愉快!

0

这是我的解决方案,但它可能不是最好的。

我只是在我的 Feed 中忽略了 id

public class Feed extends SugarRecord<Feed>  {

  @Expose int idMember;
}

它运行良好,但是真正的id不再使用。


0
我曾经花了很长时间寻找这个问题的解决方案。最终我找到了一个解决方法。只需在所需的类中添加@Table注释,而不是从SugarRecord扩展它并手动添加id属性即可。您可以通过transient关键字将其从Gson序列化中排除,或者/和使用@SerializedName注释对其进行重命名。
例如(在SugarOrm v1.4上运行良好):
@Table
public class MySugarOrmClass{

    @SerializedName("db_id")
    private transient Long id = null;

    @SerializedName("id")
    private Integer aid;

    // Add an empty constructor
    public MySugarClass(){}


    //Other fields and class attributes
    ...
}

但这意味着您不能在此类上使用.save(),.delete()等方法。相反,您必须使用SugarRecord的静态方法:SugarRecord.save(),SugarRecord.delete(),...


0
我也曾遇到同样的问题,唯一的解决方案是从我的API中重新命名id名称。例如,尝试从你的API发送nutrition_plan_id而不是id,这样就可以完成工作了。

1
唯一的问题是,我正在使用第三方API,所以无法更改ID。 - coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接