3

Androidアプリからのデータを永続化するためにAzureMobileサービスを使用しようとしています。私が今抱えている問題は、Azureデータベーステーブルの列に対応するいくつかのフィールドを持つデータ転送オブジェクトがあることです。また、永続化したくないフィールドが1つあります。@ 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:プロパティ'SubCategories'の値はタイプ'object'であり、サポートされているタイプではありません。"})

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アノテーションは無視されます。

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 に答える