Когда я заполняю этот словарь примитивными типами, процесс сериализации работает нормально, но когда я пытаюсь вставить свой словарь, заполненный каким-то пользовательским классом (например, классом Person), я получаю следующую ошибку:
Код: Выделить всё
.NET type 'Person' cannot be mapped to a BsonValueКак определить MongoDB для сериализации определенного класса как BsonDocument?
Обновление: предоставлен реальный код
Код: Выделить всё
here is my SensorData class:
[DataContract]
public class SensorData
{
[DataMember]
[BsonElement]
[BsonRepresentation(BsonType.String)]
public string Type { get; set; }
[DataMember]
[BsonElement]
[BsonRepresentation(BsonType.String)]
public string Desc { get; set; }
[DataMember]
[BsonElement]
[BsonRepresentation(BsonType.String)]
public SensorStatus Status { get; set; }
[DataMember]
[BsonElement]
[BsonRepresentation(BsonType.String)]
public string Value { get; set; }
[DataMember]
[BsonElement]
[BsonRepresentation(BsonType.String)]
public string ValueUnits { get; set; }
[DataMember]
[BsonElement]
[BsonRepresentation(BsonType.Boolean)]
public bool Event { get; set; }
[DataMember]
[BsonElement]
[BsonRepresentation(BsonType.Int32)]
public int TTL { get; set; }
}
Код: Выделить всё
public void Save(Dictionary RawSensorMessageDictionary)
{
try
{
var policyColl = new MongoClient(ConnString).GetServer().GetDatabase(DB_NAME).GetCollection(CollectionNames.RawSensorMessage.ToString());
if (!RawSensorMessageDictionary.Any(p => p.Key == "_id")) //if rawSensorMessageID is empty, mongodb will set it
RawSensorMessageDictionary.Add("_id", ObjectId.GenerateNewId().ToString());
var bsonObj = new BsonDocument(RawSensorMessageDictionary);
policyColl.Save(bsonObj);
}
catch (Exception ex)
{
//log exception
}
}
Код: Выделить всё
DataAccess.MongoDAL dal = new DataAccess.MongoDAL();
Dictionary dic = new Dictionary();
dic.Add("1", true);
dic.Add(Message.RESOURCE_TYPE, "aaa");
dic.Add(Message.RESOURCE_NAME, "bbb");
dic.Add(Message.SENSOR_DATA, new SensorData { Desc = "aaa", Event = true, Status = SensorStatus.Active, TTL = 4, Type = "sss", Value = "222" });
dal.SaveRawSensorData(dic );
Как мне это сделать?
Обновление 2:
ОК, найдена проблема. В моем методе «сохранить в БД» я использовал следующий код, чтобы преобразовать мой словарь. BsonDocument:
Код: Выделить всё
var bsonObj = new BsonDocument(RawSensorMessageDictionary);
Наконец, я заменил приведенный выше код на следующий:
Код: Выделить всё
var bsonObj = RawSensorMessageDictionary.ToBsonDocument();
dal.SaveRawSensorData(dic );
Подробнее здесь: https://stackoverflow.com/questions/265 ... ondocument
Мобильная версия