2013-03-24 1 views
3

Я пытаюсь использовать сервис Azure Mobile для сохранения данных из своего приложения для Android. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что у меня есть объект передачи данных с несколькими полями, соответствующими столбцам в таблице базы данных Azure. И у меня есть одно поле, которое я DON «T хочу сохранить. Я пытаюсь использовать аннотацию @Expose, но, похоже, это не работает, я получаю исключение от Azure, говорящее, что SubCategories имеет недопустимый тип данных. Я делаю неправильноWindows Azure SDK для Android - как исключить свойство DTO из сериализации?

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 ({ «код»: 400, «ошибка»: "ошибка: значение свойства„Подкатегории“имеет тип„объекта“, которое не поддерживается типа. "})

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

Оказывается, @Expose аннотации игнорируется, если вы используете конструктор по умолчанию, как это описано Gson here.

я был в состоянии решить мою проблему путем удаления 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; 
} 
Смежные вопросы