catalog.json
; однако если
вы использовали реализацию на Java, эти экземпляры будут пустыми. Каждое
свойство получит значение по умолчанию. Это объясняется использованием
венгерской нотации в определениях свойств в классе
Book
:
public class Book {
private final String mTitle;
private final String[] mAuthors;
private final String mIsbn;
private final int mPageCount;
private final boolean mIsFiction;
...
}
Когда библиотека Gson просматривает класс
Book
и пытается найти свойства,
соответствующие свойствам объекта JSON, она обнаружит, что в экземпляре
класса
Book
имеется свойство
mTitle
, но нет свойства title – с другой стороны,
в файле JSON нет ссылок на свойства mTitle, mIsbn или mAnything – в нем ис
-
пользуются более понятные человеку имена свойств. К счастью для нас, эта
проблема настолько распространена в Android, что для ее устранения приду
-
мано простое решение, основанное на использовании аннотации
Serialized
Name
из библиотеки Gson. Добавьте эту аннотацию перед каждым свойством
и укажите в ней строку с именем соответствующего свойства в файле JSON,
например в коде на Java:
public class Book {
public static final Book[] SAMPLE_DATA = {
new Book("Fight Club", new String[]{"Chuck Palahniuk"},
"978-0393039764", 208, true),
new Book("2001: A Space Odyssey", new String[]{"Arthur C. Clarke"},
"978-0451457998", 296, true),
new Book("Ulysses", new String[]{"James Joyce"},
"978-1420953961", 682, true),
new Book("Catch-22", new String[]{"Joseph Heller"},
"978-1451626650", 544, true),
new Book("The Stand", new String[]{"Stephen King"},
"978-0307947307", 1200, true),
Переключение слоя данных на использование JSON
303
new Book("On The Road", new String[]{"Jack Kerouac"},
"978-0143105466", 416, true),
new Book("Heart of Darkness", new String[]{"Joseph Conrad"},
"978-1503275928", 78, true),
new Book("A Brief History of Time", new String[]{"Stephen Hawking"},
"978-0553380163", 212, false),
new Book("Dispatches", new String[]{"Michael Herr"},
"978-0679735250", 272, false),
new Book("Harry Potter and Prisoner of Azkaban", new String[]{"J.K. Rowling"},
"978-0439136365", 448, true),
new Book("Dragons Love Tacos", new String[]{"Adam Rubin", "Daniel Salmieri"},
"978-0803736801", 40, true)
};
@SerializedName("title")
private String mTitle;
@SerializedName("authors")
private String[] mAuthors;
@SerializedName("isbn")
private String mIsbn;
@SerializedName("pageCount")
private int mPageCount;
@SerializedName("fiction")
private boolean mIsFiction;
public Book(String title, String[] authors, String isbn, int pageCount,
boolean isFiction) {
mTitle = title;
mAuthors = authors;
mIsbn = isbn;
mPageCount = pageCount;
mIsFiction = isFiction;
}
public String getTitle() {
return mTitle;
}
public void setTitle(String title) {
mTitle = title;
}
public String[] getAuthors() {
return mAuthors;
}
public void setAuthors(String[] authors) {
mAuthors = authors;
}
public String getIsbn() {
return mIsbn;
}
public void setIsbn(String isbn) {
mIsbn = isbn;
304
Моделирование каталога библиотеки
}
public int getPageCount() {
return mPageCount;
}
public void setPageCount(int pageCount) {
mPageCount = pageCount;
}
public boolean isFiction() {
return mIsFiction;
}
public void setFiction(boolean fiction) {
mIsFiction = fiction;
}
}
На этот раз экземпляры
Book
должны быть заполнены соответствующим об
-
разом. Отлично! Теперь у нас есть действующий протокол сериализации. Рас
-
смотрим некоторые особенности реализации, которые вы могли упустить из
виду. Первое, что вы могли пропустить в предыдущем коде, – следующий труд
-
но читаемый фрагмент:
Do'stlaringiz bilan baham: |