Установите MongoDB для сериализации класса как BSondocumentC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Установите MongoDB для сериализации класса как BSondocument

Сообщение Anonymous »

У меня есть словарь < /code> в качестве ввода ввода для mongodb.save () < /code>. < /p>

Когда я заполняю этот словарь примитивными типами - процесс сериализации работает нормально:
.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 );
Я хочу, чтобы мое приложение автоматически сериализировало Sensordata объект Bsondocument . Если я не делаю этого вручную, я получаю следующее исключение: .NET Type 'Sensordata' не может быть сопоставлен с bsonValue < /code> < /p>

Как мне это сделать? Словарь 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»