11

我用来从 json 响应GSON创建一个对象。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不长字段的人?

4

6 回答 6

4

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

jsonObject.getJSONObject("nutrition_day").toString().replace("\"id\"","\"nutrition_day_id\"")
于 2015-07-12T21:14:18.913 回答
1

不需要做大的改变。

只需在Long类型之前使用瞬态语句。

    @SerializedName("id")
    @Expose
    private transient Long id;

然后,如果你有getIdsetId方法,应该删除它们。

玩得开心!

于 2020-01-09T21:57:23.273 回答
1

它帮助我更改id名称mid@Expose为所有必须序列化的字段添加注释@SerializedName,并向新id字段添加注释。

@SerializedName("id")
@Expose
private final String mid;

@Expose
private final String street;
于 2016-01-09T23:52:52.683 回答
0

我一直关心同样的问题,我发现的唯一解决方案是从我的 API 重命名 id 名称。例如,尝试从您的 API 发送 Nutrition_plan_id 而不是 id ,它会完成这项工作。

于 2014-10-24T00:42:59.207 回答
0

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

id我只是在我的提要中忽略了

public class Feed extends SugarRecord<Feed>  {

  @Expose int idMember;
}

id它工作正常,但是不再使用真实的。

于 2015-03-15T08:21:36.233 回答
0

很长一段时间以来,我一直在寻找解决这个问题的方法。最后我找到了解决办法。只需将@Table注释添加到所需的类,而不是从扩展它SugarRecord并手动添加id属性。您可以通过关键字将其从 Gson 序列化中排除transient,或/和使用@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()在此类上使用 , etc. 方法。相反,您必须使用 SugarRecord 的静态方法: SugarRecord.save(), SugarRecord.delete(),...

于 2016-02-24T12:25:22.153 回答