讨教各位,本人用官方的1.11的驱动,查询时collection.FindAllAs<T>()方法返回MongoCursor这个对象结果该怎么还原为实体对象呢?
本人的实体对象中的CurrentObj包含了另一个实体对象,bson结构如下:
本人的实体对象中的CurrentObj包含了另一个实体对象,bson结构如下:
/* 1 */
{
"_id" : ObjectId("57abebbe1f28d84e43ede3f9"),
"_t" : "AModel",
"AAId" : 11111,
"CurrentObj" : {
"_t" : "BModel",
"BBId" : 88888
},
"MinTime" : Date(-62135596800000),
"MaxTime" : Date(-62135596800000)
}
本人的代码:
public static List<T> GetAll<T>(AModel model)// 传进来的T也是AModel
{
if (model == null || Utils.StrIsNullOrEmpty(model.CollectionName))
{
return null;
}
InitMongoDB(model.CollectionName);
MongoCursor<T> result = mDBProvider.GetAll<T>();// 这里已查询出结果
List<T> resultList = mDBProvider.CursorToList<T>(result);// 调用下面的遍历方法
return resultList;
}
public List<T> CursorToList<T>(MongoCursor<T> cursor)
{
List<T> resultList = new List<T>();
cursor.GetEnumerator().MoveNext();// 这里报错
if(cursor.Count() > 0)
{
foreach (var obj in cursor)// 遍历
{
resultList.Add(obj);
}
}
return resultList;
}
运行到MoveNext()时的报错详情:
An error occurred while deserializing the CurrentObj property of class AModel: Unknown discriminator value “BModel”.
应该时CurrentObj里面的BModel对象没有正确反序列化,讨教该怎么处理?
AModel实体的定义:
public class AModel
{
public int AAId {get; set; }
public Object CurrentObj { get; set; }
}
先感谢诸位~
解决方案
10
BModel呐?
30
https://www.google.com.hk/search?q=BsonClassMap.RegisterClassMap&oq=BsonClassMap.RegisterClassMap&aqs=chrome..69i57j0l3.816j0j8&sourceid=chrome&ie=UTF-8
http://stackoverflow.com/questions/5505591/how-to-registerclassmap-for-all-classes-in-a-namespace-for-mongodb
http://stackoverflow.com/questions/5505591/how-to-registerclassmap-for-all-classes-in-a-namespace-for-mongodb