Flutter: проблема при преобразовании json в модель с использованием json_serializable
Допустим, есть две модели Пользователь и Город
@JsonSerializable()
class User {
int id;
String name;
City? city;
}
@JsonSerializable()
class City {
int id;
String name;
}
Теперь предположим, что во время вызова API у нас есть модель пользователя, но в объектной модели города мы получаем только идентификатор, а не имя . Что-то вроде этого
{
"id": 5,
"name": "Matthew",
"city": {
"id": 12
}
}
Но из-за характера json_serializable и json_annotation по умолчанию. Этот JSON не сопоставляется с моделью User, во время сопоставления он выдает исключение.
Тип Null не является подтипом типа String. (потому что здесь отсутствует ключ имени в объекте города)
Но поскольку мы уже объявили в объекте User, что City является необязательным, я хотел, чтобы он анализировал пользовательский JSON с помощью city как null.
Любая помощь или решение будут очень признательны, спасибо
1 ответ
В настоящее время не поддерживается игнорирование определенного поля при сериализации или десериализации. Однако есть обходной путь, который я использую.
- Сделайте глобальный метод в вашем файле модели, который просто возвращает null следующим образом:
T? toNull<T>(_) => null;
- Внутри твоего
User
модель добавить кастомнуюJsonKey
для города:
@JsonKey(fromJson: toNull, includeIfNull: false)
City? City;
Что это значит, так это то, что при преобразовании из Json он использует вашу конкретную функцию для преобразования
city
и заменяет ваше значение на null. Тогда из-за
includeIfNull
свойство просто пропускает синтаксический анализ.