Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Конструктор XmlSerializer не получается вызвать для произвольного объекта / 6 сообщений из 6, страница 1 из 1
15.03.2019, 19:03
    #39786973
AlexV1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор XmlSerializer не получается вызвать для произвольного объекта
Хочу сериализовать произвольный obj1.
Он может быть любого класса, помеченного как [Serializable]

Код: c#
1.
2.
3.
4.
5.
public static bool Func1(object obj1)
{
   ...
  XmlSerializer xmlser = new XmlSerializer(typeof(Person));  // Но указать класс Person - это жестко. Хочется сделать гибче
}


Можно ли как то, например зная имя класса объекта obj1 в переменной

Код: c#
1.
string ClassName = "Person";


вызвать конструктор XmlSerializer, используя эту переменную?

ну или иным способом как то...
...
Рейтинг: 0 / 0
15.03.2019, 19:31
    #39786994
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор XmlSerializer не получается вызвать для произвольного объекта
AlexV1,

Код: c#
1.
2.
3.
4.
5.
6.
public static bool Func1(object obj1)
{
  ...
  XmlSerializer xmlser = new XmlSerializer(obj1?.GetType() ?? throw new ArgumentNullException(nameof(obj1)));
  ...
}
...
Рейтинг: 0 / 0
15.03.2019, 19:41
    #39787000
AlexV1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор XmlSerializer не получается вызвать для произвольного объекта
Сон Веры Павловны,

спасибо.

Теперь выдало на этой строке вот что

NotSupportedException: Невозможно сериализовать член Common.ConfData.typeRec типа System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[Common.TypeRec, common, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], т. к. он содержит реализацию IDictionary.

что можно сделать с членом Dictionary, чтоб сериализовался?
...
Рейтинг: 0 / 0
15.03.2019, 21:35
    #39787038
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор XmlSerializer не получается вызвать для произвольного объекта
AlexV1что можно сделать с членом Dictionary, чтоб сериализовался?
Ничего - у XmlSerializer'а достаточно жесткие требования к начинке класса, и без доп. телодвижений здесь ничего не сделать. Например, вот таких . Возможно, придется сделать часть логики именно для сериализации, а часть контракта класса пометить атрибутом XmlIgnore. Ну, либо наколхозить свою сериализацию в XML - часто ручная потеговая-поатрибутная запись в выходной stream бывает оптимальнее и гибче, чем стандартная xml-сериализация.
...
Рейтинг: 0 / 0
15.03.2019, 21:44
    #39787040
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор XmlSerializer не получается вызвать для произвольного объекта
я даже больше скажу, для каждого типа, XmlSerializer создает в памяти отдельную сборку\программу и загружает её в память, после чего с помощью этого кода сериализует\десериализует объекты. То есть, сам сериализатор универсальный, но он генерирует очень узко специализированный код для заданного типа
...
Рейтинг: 0 / 0
16.03.2019, 06:26
    #39787090
AlexV1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конструктор XmlSerializer не получается вызвать для произвольного объекта
Спасибо за ответы.
С XmlSerializer действительно не все просто.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Конструктор XmlSerializer не получается вызвать для произвольного объекта / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]