У меня есть пара классов, помеченных интерфейсом. пример ::1001*
public class Example1 : IExample {}
public class Example2 : IExample {}
На моем мастер-классе у меня есть реквизит примера, но он объявлен как интерфейс. напр .:
public class Master
{
public string Company { get; set; }
public IExample Examples { get; set; }
}
Для записи в пн go работает нормально, пн go добавляет реквизит с именем класса, подписанным интерфейсом, напр. Пример1 или Пример2
Но десериализация не работает вообще. Выдает ошибку:
Exception thrown: 'System.FormatException' in MongoDB.Bson.dll: 'An error occurred while deserializing the Source property of class Audit.Processed: Unknown discriminator value 'Example1'.'
Нужно ли что-то регистрировать или добавлять какой-либо атрибут чего-либо в Mon go, понимающий этот класс? Почему вставка работает?
Я нашел другие посты, подобные этой ( Десериализация полиморфных c типов с MongoDB C# Driver ), но все они говорят о базовых классах и не Interface как свойство.
Работало, как сказал проверенный пост, но мне пришлось создать класс stati c, иначе выкинуло бы исключение, сообщающее, что оно уже зарегистрировано. Вот рабочий код:
public class ClassMapRegisterer
{
static ClassMapRegisterer()
{
BsonClassMap.RegisterClassMap<Example1>();
}
public static void RegisterClassMaps()
{
}
}
Прежде чем открывать соединение, просто наберите:
ClassMapRegisterer.RegisterClassMaps();
cheers