我使用MongoDB将文档反序列化为C#对象,并且遇到ObjectID字段问题。这是我得到的错误:
缺少类MyProject.Data.MyDocument的属性'LayoutId'的必需元素'LayoutId'。
哪个(如果它看起来不奇怪)确实有意义,因为指定了LayoutId字段:
using System;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace MyProject.Data
{
public class MyDocument
{
public override ObjectId Id { get; set; }
[BsonRequired]
public String Name { get; set; }
[BsonRequired]
public ObjectId LayoutId { get; set; }
}
}
它填充在数据库中:
那么序列化过程的其他方面可能会阻止此元素被填充?特定版本的驱动程序中是否存在错误?我使用的是正确的数据类型吗?
还应该注意:
答案 0 :(得分:1)
我无法重现此错误。你能用测试程序更新你的问题吗?
using MongoDB.Bson;
using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
namespace TestConsole_Source
{
class Program
{
public class MyDocument
{
public ObjectId Id { get; set; }
[BsonRequired]
public string Name { get; set; }
[BsonRequired]
public ObjectId LayoutId { get; set; }
}
static void Main(string[] args)
{
var server = MongoServer.Create();
server.Connect();
var db = server.GetDatabase("docstest");
var collection = db.GetCollection<MyDocument>("docs");
collection.Drop();
var doc = new MyDocument
{
Name = "Test",
LayoutId = ObjectId.GenerateNewId()
};
collection.Save(doc);
var foundDoc = collection.FindOne();
//Console.ReadKey();
}
}
}
答案 1 :(得分:0)
感谢Craig试图解决这个问题。事实证明我没有正确地写出这个问题。
问题是我在结果上调用了“SetFields()”,而我请求的字段不包含“LayoutId”。我原本期望驱动程序出现更具描述性的错误。