Скажем, у нас есть ключ со значениями, которые являются полиморфными по своему смыслу. Рассмотрим следующий пример проекта:Сохранение словаря с полиморфными значениями в mongoDB с использованием C#
public class ToBeSerialized
{
[BsonId]
public ObjectId MongoId;
public IDictionary<string, BaseType> Dictionary;
}
public abstract class BaseType
{
}
public class Type1 : BaseType
{
public string Value1;
}
public class Type2:BaseType
{
public string Value1;
public string Value2;
}
internal class Program
{
public static void Main()
{
var objectToSave = new ToBeSerialized
{
MongoId = ObjectId.GenerateNewId(),
Dictionary = new Dictionary<string, BaseType>
{
{"OdEd1", new Type1 {Value1="value1"}},
{
"OdEd2",
new Type1 {Value1="value1"}
}
}
};
string connectionString = "mongodb://localhost/Serialization";
var mgsb = new MongoUrlBuilder(connectionString);
var MongoServer = MongoDB.Driver.MongoServer.Create(mgsb.ToMongoUrl());
var MongoDatabase = MongoServer.GetDatabase(mgsb.DatabaseName);
MongoCollection<ToBeSerialized> mongoCollection = MongoDatabase.GetCollection<ToBeSerialized>("Dictionary");
mongoCollection.Save(objectToSave);
ToBeSerialized received = mongoCollection.FindOne();
}
}
Иногда, когда я пытаюсь десериализации, я получаю ошибки десериализации как «Неизвестное значение дискриминатора„Имя конкретного типа“». Что я делаю неправильно? Если каждое значение хранит _t, почему он не может правильно отобразить его?
Ребята, спасибо. Теперь у меня есть дилемма, чей ответ принять –
Ну, ответ Андрея более полный. Должен признаться, я забыл синтаксис вызова «BsonClassMap.RegisterClassMap», и когда я посмотрел его, Андрей уже отправил свой ответ. Я бы предпочел более полный ответ, потому что другие пользователи, вероятно, сначала рассмотрят принятый ответ. – mnemosyn