Когда я заполняю этот словарь примитивными типами - процесс сериализации работает нормально:
.NET type 'Person' cannot be mapped to a BsonValue< /code> < /p>
Я заметил, что если я вставляю свой пользовательский тип, преобразованный в BSondocument < /code> Процесс сериализации работает отлично. /> Обновление: реальный код предоставленный < /p>
Код: Выделить всё
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; }
}
< /code>
Вот методы, которые сохраняют данные в mongodb: < /p>
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
}
}
< /code>
А вот код из моего Unittest: < /p>
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 );
Как мне это сделать? Словарь bsondocument < /code>: < /p>
var bsonObj = new BsonDocument(RawSensorMessageDictionary);
< /code>
Я ожидаю, что создание нового экземпляра «bsondocument» из другого объекта будет обрабатывать преобразование точно так же, как object.tobsondocument () < /code>, но, очевидно, это не так. < /p>
Наконец -то я заменил код выше на следующее: < /p>
var bsonObj = RawSensorMessageDictionary.ToBsonDocument();
dal.SaveRawSensorData(dic );
< /code>
Теперь он работает.
Подробнее здесь: https://stackoverflow.com/questions/265 ... ondocument