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 ответ

В настоящее время не поддерживается игнорирование определенного поля при сериализации или десериализации. Однако есть обходной путь, который я использую.

  1. Сделайте глобальный метод в вашем файле модели, который просто возвращает null следующим образом:
      T? toNull<T>(_) => null;
  1. Внутри твоего User модель добавить кастомную JsonKey для города:
      @JsonKey(fromJson: toNull, includeIfNull: false)
City? City;

Что это значит, так это то, что при преобразовании из Json он использует вашу конкретную функцию для преобразования cityи заменяет ваше значение на null. Тогда из-за includeIfNull свойство просто пропускает синтаксический анализ.

Другие вопросы по тегам