3

我正在尝试使用 Azure 移动服务来保存我的 Android 应用程序中的数据。我现在遇到的问题是我有一个数据传输对象,其中有几个字段对应于 Azure 数据库表中的列。而且我有一个字段,我不想保留。我正在尝试使用@Expose 注释,但它似乎不起作用,我从 Azure 收到一个异常,说 SubCategories 的数据类型无效。什么是我做错了吗?

package com.mycorp.myapp.model;
import java.util.*;
import com.google.gson.annotations.*;

public class Category {

    public Category(){
        SubCategories = new ArrayList<Category>();
    }

    public int Id;

    public String Name;

    public int ParentId;

    @Expose(serialize = false, deserialize = false)
    List<Category> SubCategories;
}

下面的代码返回一个 MobileServiceException ({"code":400,"error":"Error: The value of property 'SubCategories' is of type 'object' which is not a supported type."})

Category category = new Category();     
category.Name = "new";
category.ParentId = 1;      
mClient.getTable(Category.class).insert(category, new TableOperationCallback<Category>() {          
        @Override
        public void onCompleted(Category entity, Exception exception, ServiceFilterResponse response) {
            if(exception!=null)
            {
                Log.e("Service error", exception.getMessage());
            }               
        }
    });
4

1 回答 1

4

事实证明,如果您使用所描述的默认 Gson 构造函数,则会忽略 @Expose 注释此处所述的默认 Gson 构造函数,则会忽略 @Expose 注释。

我能够通过删除 Expose 并使字段瞬态来解决我的问题:

package com.mycorp.myapp.model;
import java.util.*;
import com.google.gson.annotations.*;

public class Category {

    public Category(){
        SubCategories = new ArrayList<Category>();
    }

    public int Id;

    public String Name;

    public int ParentId;

    //@Expose(serialize = false, deserialize = false)
    transient List<Category> SubCategories;
}
于 2013-03-25T02:42:23.473 回答