результат мог быть и объект и List?
Что значит "объект и лист"? Может "объект или лист"? Union-type открытого в дарте нет (только под капотом у FutureOr).
Да "объект или лист". Я уже передумал реализовывать такое. Не знаю как использовать методы JsonSerializable fromJson и toJson для generic.
Можно используя extends в дженерике, создав интерфейс\базовый класс для методов fromJson/toJson, но звучит как не самое интересное занятие.
Но, удобно. Согласитесь, удобнее httpGet<Order>("query") Чем десериализировать каждый response
Чтобы избавиться от этого мартышкиного труда придумали кодогенерацию, рефлексию. Если со вторым беда, то вот для первого вариантов хоть отбавляй. Генерация запросов, генерация сериализации и пр. Да и без согласования "сверху" (от dart vm) слабо представляю, как должен метод httpGet<Order>("query") понять как ему инициализировать Order.
В C# я реализовал это как-то так
И использовал так: GenericHttp<Fund>.HttpGetAsync($"api/Orders/GetUserFundDetails/{AssetId}/)
Слабо знаком с шарпом, но он явно более богатый язык, нежели простенький дарт. Как DeserializeObject выбирает конструктор через который будет инициализация объекта происходить? Если их 2 подходящих? Если ни одного?
Судя по всему, через обычный свитч дёргает нужный конструктор
Сейчас проверю скажу)
конструктор по умолчанию (без параметров)
Можно указать через атрибут нужный конструктор
Единственное, что так сходу могу посоветовать — сделать свой метод обёртку, который будет принимать dynamic и дальше выезжать на проверках.
(буэ это не отменяет)
Вам просто кажется что не удобно) Если привыкнуть в кайф
Привыкнуть можно ко многому. Кто-то с битого стекла может с улыбкой себе засунуть в попу. Но хорошей идеей оно от этого не станет. Но это я противник рефлексии на ровной месте, так что меня слушать не надо. Кодогенерация и/или dynamic в параметрах в помощь
Обсуждают сегодня