Я работаю над проектом Windows Form Control для импорта в стороннее клиентское программное обеспечение с использованием предоставленного SDK. Пользовательский элемент управления, написанный еще одной компанией, которую я пытаюсь загрузить, требует входа на сервер перед отображением информации, что может занять 20-30 секунд. Чтобы ускорить работу, у меня возникла идея предварительно загрузить информацию, необходимую элементу управления, в текстовый файл. Поскольку это неизвестный тип, он выдает ошибки при попытке сериализации класса.
У меня есть словарь, который я использую для ссылки на правильный класс ICamera. Если я изменю "cam" с типа ICamera на строку, например "cam.GetLiveURL()". Он пишет текстовый файл без проблем. Это код, который я использую для заполнения словаря.
foreach (ICamera cam in _adapter.Cameras())
{
OCCamera.Add(cam.GetDisplayName(), cam);
}
Я пробовал XMLSerializer, и мне кажется, что ему трудно работать со словарем.
Я пробовал BinaryFormatter и получаю сообщение об ошибке:
Введите «OCAdapter.OCCamera» в сборке «OCAdapter.dll», не помеченной как сериализуемая.
Я пробовал DataContractSerializer и получаю сообщение об ошибке:
Введите «OCAdapter.OCCamera» с именем контракта данных «OCCamera:http://schemas.datacontract.org/2004/07/OCAdapter' не ожидается. Рассмотрите возможность использования DataContractResolver или добавления типов ant, которые не известны статически, в список известных типов, например, с помощью атрибута KnownTypeAttribute или путем добавления в список известных типов, передаваемых в DataContractSerializer.
Я пробовал играть с DataContractResolver и не могу заставить его работать, я вообще его не понимаю.
Код, который я использую для BinaryFormatter и DataContractSerializer, взят прямо из MSDN или где-то еще, и отлично тестируется без пользовательского типа.
Может быть, есть лучший способ справиться со всем этим, и я его упускаю. Я не против того, чтобы отказаться от маршрута Dictionary для чего-то другого, или я могу переписать любое количество другого кода, чтобы это работало.