c# – 在MongoDB中保存POCO时忽略属性,但在序列化为JSON时不忽略
我有以下模型,我存储在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]装饰了这些参数.当我的应用程序代码从MongoDB检索Person时,它会在将其序列化为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]修饰. 有没有办法告诉Official MongoDB C# driver忽略在MongoDB中保存参数但在序列化为JSON时不要忽略它? 解决方法
当你使用驱动程序本身将对象序列化为json时,我认为这是不可能的.
但是你可以(并且可能应该)使用 public class Person { [JsonIgnore] publis string FullName {get; set;} [BsonIgnore] public string FirstName { get; set; } [BsonIgnore] public string LastName { get; set; } } 在我看来,这也是一个更好的设计,因为bson用于数据库,而json(大多数)用于网络消费,因此可以使用不同的工具完成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |