使用SugarORM和GSON解析字符串ID

时间:2014-04-14 20:31:36

标签: android json gson sugarorm

我使用GSON从json响应中创建SugarRecord对象。我使用的API返回一个名为" id"的字段,但是" id"的类型。是一个字符串,而不是一个长(后端使用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字段?

6 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

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

@Expose
private final String street;

答案 2 :(得分:1)

不需要大的改变。

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

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

然后,如果您具有 getId setId 方法,则应将其删除。

玩得开心!

答案 3 :(得分:0)

我一直关注同样的问题,我发现的唯一解决方案是从我的API重命名id名称。从示例中尝试从您的API发送nutrition营养计划,而不是您的API,它将完成工作。

答案 4 :(得分:0)

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

我在Feed中忽略了id

public class Feed extends SugarRecord<Feed>  {

  @Expose int idMember;
}

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

答案 5 :(得分: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(),...