170 похожих чатов

Есть класс BotOptions. У него есть поле MessengersOptions, которое хранит

настройки мессенджеров в классе MessengerOptions. У каждого мессенджера соответственно свои настройки, которые наследуются от MessengerOptions. Возникает проблема, что если конфигурация мессенджеров хранится в json, то ее невозможно десериализовать, так как конкретный тип неизвестен во время десериализации. На что можно заменить поле MessengersOptions в BotOptions, не подключая сторонние библиотеки?

8 ответов

4 просмотра

Dictionary, если всё настолько плохо. Либо у того же newtonsoft есть опция сериализации вместе с именем типа

SightRo- Автор вопроса
SomebodyOdd
Dictionary, если всё настолько плохо. Либо у того ...

Для словаря там вложенность неизвестна. Newtonsoft пока не хочется тащить. Может есть другой вариант, где можно сделать красиво или изложенной информации недостаточно?

Почему нельзя десериализовать если конкретный тип неизвестен?

SightRo
Для словаря там вложенность неизвестна. Newtonsoft...

Dictionary<string, object>, где object может быть таким же словарём, или примитивом. Но проще будет протащить библиотеку и не изобретать велосипедов.

Гугли "c# json deserialize abstract class"

SightRo- Автор вопроса
Andrew Shurunov
Почему нельзя десериализовать если конкретный тип ...

Нужно чтобы поля унаследованного типа сохранились.

SightRo
Нужно чтобы поля унаследованного типа сохранились.

Я понимаю. Это решается либо включением специальной функции, чтобы у тебя в json была пометка "class: Namespace.MyClass2", либо написанием своего конвертера

SightRo- Автор вопроса
Andrew Shurunov
Я понимаю. Это решается либо включением специально...

Пометка не вариант, но конвертеры могут сработать. Спасибо.

Похожие вопросы

Обсуждают сегодня

Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
А чем вам питонисты не угодили?😂
.
79
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
77
А дин типизация это хорошо или плохо?
Alexey
12
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Исходники плюс документация? Вы гоните)) демок хватит всем
zamtmn
11
Карта сайта