我将以下模型存储在MongoDB中:
public class Person
{
public ObjectId Id { get; set; }
public Int PersonId { get; set; }
public BsonDocument Resume { get; set; } // arbitrary JSON
[BsonIgnore]
public string FirstName { get; set; } // stored elsewhere,
// populated at runtime
[BsonIgnore]
public string LastName { get; set; } // ditto
}
Resume
这是BsonDocument
我存储无法标准化为POCO的任意JSON的地方(每次出现的情况都大不相同)。
我不想存储此人的名字和姓氏,因为该信息已经存储在SQL数据库中,而且我也不必担心同步更改。所以我用修饰了这些参数[BsonIgnore]
。当我的应用程序代码Person
从MongoDB中检索到时,它将在将其序列化为JSON之前填充FirstName
和LastName
参数,如下所示:
public ActionResult GetPerson(int id)
{
var query = New QueryDocument("_id", ObjectId.Parse(id));
// personCollection is Collection<Person>
var person = personCollection.FindOne(query);
var pc = personCache.GetPerson(person.PersonId);
person.FirstName = pc.FirstName;
person.LastName = pc.LastName;
var settings = New JsonWriterSettings() { Outputmode = JsonOutputMode.Strict }
return Json(person.ToJson(settings), JsonRequestBehavior.AllowGet);
}
但是,生成的JSON缺少FirstName
和LastName
节点,这显然是因为它们用修饰[BsonIgnore]
。
有没有一种方法可以告诉MongoDB C#官方驱动程序在序列化为JSON时忽略将参数保存在MongoDB中而不忽略它?
当您使用驱动程序本身将对象序列化为时,我认为这是不可能的json
。
但是,您可以(可能应该)json.net
用来序列化为json
。这样一来,您BsonIgnore
将不会对json
序列化产生任何影响,而json
属性(如JsonIgnore
)将不会对您的mongo驱动程序产生影响。
public class Person
{
[JsonIgnore]
publis string FullName {get; set;}
[BsonIgnore]
public string FirstName { get; set; }
[BsonIgnore]
public string LastName { get; set; }
}
我认为这也将是一个更好的设计,因为该资源bson
用于数据库,而json
(主要)用于网络使用,因此可以使用其他工具来完成。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句