34

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」を別のものとして取っているだけだと思います。

どうすれば対処できますか?ありがとうございました

4

7 に答える 7

-2

あなたの子クラスはおそらくそれが父を継承することを指定する必要があります

パブリッククラス子:父{...}

おそらく、Fatherクラスは既知の型属性(WCFの場合)を追加する必要があります。

[DataContract]
[KnownType(typeof(Child))]
public class Father

これが保存/フェッチするMongoCollection( "fathers")の場合、予想される子タイプごとにクラスマップを登録する必要がある場合があります。

if (!BsonClassMap.IsClassMapRegistered(typeof(Child)))
{
    BsonClassMap.RegisterClassMap<Child>(
        cm => { cm.AutoMap(); });
}

@alexjamesbrownが述べたように、pocoオブジェクトのidフィールドに「_id」という名前を付ける必要はありません。継承の考え方は、継承することです。したがって、父の「id」フィールド(名前が何であれ)を使用するだけで十分です。あなたのFatherクラスがIdプロパティと_idプロパティの両方を持っている理由は明らかではありません。それらの1つはおそらく必要ありません。

于 2013-03-18T22:40:33.933 に答える