c# – 在MongoDB中保存POCO时忽略属性,但在序列化为JSON时不忽略它

前端之家收集整理的这篇文章主要介绍了c# – 在MongoDB中保存POCO时忽略属性,但在序列化为JSON时不忽略它前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下模型,我存储在MongoDB中:
  1. public class Person
  2. {
  3. public ObjectId Id { get; set; }
  4. public Int PersonId { get; set; }
  5. public BsonDocument Resume { get; set; } // arbitrary JSON
  6.  
  7. [BsonIgnore]
  8. public string FirstName { get; set; } // stored elsewhere,// populated at runtime
  9. [BsonIgnore]
  10. public string LastName { get; set; } // ditto
  11. }

Resume是一个BsonDocument,我存储了无法标准化为POCO的任意JSON(每次出现都大不相同).

我不想存储该人的名字和姓氏,因为该信息已存储在sql数据库中,我不想担心同步更改.所以我用[BsonIgnore]装饰了这些参数.当我的应用程序代码从MongoDB检索Person时,它会在将其序列化为JSON之前填充FirstName和LastName参数,如下所示:

  1. public ActionResult GetPerson(int id)
  2. {
  3. var query = New QueryDocument("_id",ObjectId.Parse(id));
  4. // personCollection is Collection<Person>
  5. var person = personCollection.FindOne(query);
  6.  
  7. var pc = personCache.GetPerson(person.PersonId);
  8.  
  9. person.FirstName = pc.FirstName;
  10. person.LastName = pc.LastName;
  11.  
  12. var settings = New JsonWriterSettings() { Outputmode = JsonOutputMode.Strict }
  13. return Json(person.ToJson(settings),JsonRequestBehavior.AllowGet);
  14. }

但是,生成的JSON缺少FirstName和LastName节点,显然是因为它们用[BsonIgnore]修饰.

有没有办法告诉Official MongoDB C# driver忽略在MongoDB中保存参数但在序列化为JSON时不要忽略它?

解决方法

当你使用驱动程序本身将对象序列化为json时,我认为这是不可能的.

但是你可以(并且可能应该)使用json.net序列化为json.这样你的BsonIgnore对json序列化没有影响,json属性(比如JsonIgnore)对你的mongo驱动没有任何影响.

  1. public class Person
  2. {
  3. [JsonIgnore]
  4. publis string FullName {get; set;}
  5. [BsonIgnore]
  6. public string FirstName { get; set; }
  7. [BsonIgnore]
  8. public string LastName { get; set; }
  9. }

在我看来,这也是一个更好的设计,因为bson用于数据库,而json(大多数)用于网络消费,因此可以使用不同的工具完成.

猜你在找的C#相关文章