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によって内部的に維持されるため、クラス宣言ではこのフィールドは必要ありません。これが誰かを助けることを願っています
動的リスト(リスト)を使用してフィルターを作成していましたが、同様のエラーを受け取りました。これらの行をデータクラスに追加して、問題を修正しました。
[BsonId]
public ObjectId Id { get; set; }
var conventionPack = new ConventionPack { new IgnoreExtraElementsConvention(true) };
ConventionRegistry.Register("IgnoreExtraElements", conventionPack, type => true);
これは完璧に機能します! [BsonIgnoreExtraElements]もうまく機能しましたが、CamelCaseElementNameConventionのような他のConventionRegistryを追加したい場合は、Attribute 1をオーバーライドし、同じ例外が発生します。他の属性を使用しても実現できるかどうかはわかりません。
同じ問題に直面しました。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; }
}
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);
私の場合、この作業:ラベルを追加
[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; }}