我从MongoDB中的集合中得到了结果,结构与下面相同
[DataContract]
public class Father
{
[BsonId]
[DataMember]
public MongoDB.Bson.ObjectId _id { get; set; }
[DataMember]
public string Id { get; set; }
[DataMember]
public List<Child> childs { get; set; }
}
[DataContract]
public class Child
{
[DataMember]
public string Id { get; set; }
[DataMember]
public int Name { get; set; }
}
当我尝试这个:
List<Father> f = result.ToList();
它叫Element 'Id' does not match any field or property of the class Model.Child
我认为它只需要'Id'作为其他东西。
我怎么处理它?谢谢
我通过在类声明之上添加[BsonIgnoreExtraElements]来解决类似的问题。 ObjectId由MongoDB内部维护,在App级别不需要,因此在类声明中我不需要此字段。希望这会对某人有所帮助
我遇到了同样的问题。在var data = query.ToList();
发生了错误
var collection = db.GetCollection<Product>("Products");
var query =
from e in collection.AsQueryable<Product>()
where e.name == "kalem"
select e;
var data = query.ToList();
我的插入是这样的:
var collection = db.GetCollection<Product>("Products");
collection.InsertBatch(products);
我解决了如下。
ObjectId id = new ObjectId();
var collection = db.GetCollection<Product>("Products");
collection.InsertBatch(products);
id = pr.Id;
我将id
添加到Product类,如下面的Product Class
class Product
{
public ObjectId Id { get; set; }
public string name { get; set; }
public string category { get; set; }
public double price { get; set; }
public DateTime enterTime { get; set; }
}
这个工作适合我的情况:添加标签
[DataMember]
[BsonElement("songName")]
在元素上:
[BsonIgnoreExtraElements]
public class Music
{
[BsonId]
[DataMember]
public MongoDB.Bson.ObjectId _id { get; set; }
[DataMember]
public string Id { get; set; }
[DataMember]
[BsonElement("songName")]
public string SongName { get; set; }
[DataMember]
[BsonElement("artistName")]
public string ArtistName { get; set; }}
您的Child类应该指定它继承父
公共课儿童:父亲{...}
您的父类应该添加已知的类型属性(对于WCF)。
[DataContract]
[KnownType(typeof(Child))]
public class Father
如果这是您保存/获取的MongoCollection(“父亲”),那么您可能需要为每个预期的子类型注册一个类映射。
if (!BsonClassMap.IsClassMapRegistered(typeof(Child)))
{
BsonClassMap.RegisterClassMap<Child>(
cm => { cm.AutoMap(); });
}
正如@alexjamesbrown所提到的,您不需要在poco对象'_id'上命名id字段。继承的想法是继承。因此,使用父的“id”字段(无论它的名称)应该足够了。目前尚不清楚为什么你的父类具有Id和_id属性。其中一个可能没有必要。
您所要做的就是删除ObjecId属性上的[DataMember]并将Id绑定到ObjectId _id。
所以你的课应该是这样的:
[DataContract]
public class Father
{
[BsonId]
public MongoDB.Bson.ObjectId _id { get; set; }
[DataMember]
public string Id {
get { return _id.ToString(); }
set { _id = ObjectId.Parse(value); }
}
[DataMember]
public List<Child> childs { get; set; }
}
ps:在你的情况下,必须手动生成子id,如果你想让它成为objectId(mongo),你最后会做同样的技巧,为了反序列化对象,你应该使用newtonsoft.json引用并做这个
Father = JsonConvert.DeserializeObject<Father>(response.Content);