将mongoDB文档映射到C#类时如何处理id元素

时间:2017-04-07 10:17:38

标签: c# mongodb mongodb-.net-driver bson

我想反序列化看起来像这样的文档:

{ 
    "_id" : ObjectId("58e67bd8df79507aa3f8a6b6"), 
    "value" : 10,
    "stack" : [
        {
            "id" : "49ccbadf-5964-11e6-b1e9-549f3520935c", 
            "value" : 0
        }, 
        {
            "id" : "49ccb5cc-5964-11e6-b1e9-549f3520935c", 
            "value" : 0
        }
    ]
}

到C#类。类名是Entry,其定义如下:

public class Entry
{
    public BsonObjectId _id { get; set; }
    public int value { get; set; }
    public List<Stack> stack { get; set; }
}

,Stack类看起来像这样

public class Stack
{
    public string id { get; set; }
    public int value { get; set; }
}

查询时我得到以下异常

'An error occurred while deserializing the stack property of class ConsoleApp4.Entry: Element 'id' does not match any field or property of class ConsoleApp4.Stack.'

我可以使用[BsonIgnoreExtraElements]属性装饰堆栈类,然后异常消失但我不想这样做,因为我必须在查询中使用id属性。任何人都知道我应该怎么做?我将不胜感激任何帮助。

3 个答案:

答案 0 :(得分:1)

通过一些试验和错误得到它 - 足以用[BsonNoId]属性装饰堆栈类。

答案 1 :(得分:0)

我认为你也不需要。只需改变这样的类型:

public ObjectId Id { get; set; }

答案 2 :(得分:0)

要使用 ObjectId 类,您需要引入 nuget 包 MongoDB.Bson,这将允许您映射 _id 属性