Code: Select all
.NET type 'Person' cannot be mapped to a BsonValue< /code> < /p>
Ich habe festgestellt, dass, wenn ich meinen benutzerdefinierten Typ in BSonDocument konvertiert habe. < /Code> Der Serialisierungsprozess funktioniert großartig. /> Update: Real Code bereitgestellt < /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>
Hier sind die Methoden, die die Daten in MongoDB speichern: < /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>
Und hier ist der Code von meinem unittesten: < /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 );
Wie soll ich es tun? Dictionary BSondocument < /code>: < /p>
var bsonObj = new BsonDocument(RawSensorMessageDictionary);
< /code>
Ich würde erwarten, dass das Erstellen einer neuen Instanz von 'bSondocument' von einem anderen Objekt die Konvertierung genau wie Object.tobSondocument () < /code> tut, aber anscheinend ist es nicht so. < /p>
Schließlich habe ich den obigen Code auf folgende ersetzt: < /p>
var bsonObj = RawSensorMessageDictionary.ToBsonDocument();
dal.SaveRawSensorData(dic );
< /code>
Jetzt funktioniert es.