讨教各位,本人用官方的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