如何在不使用 BsonIgnore 的情况下保存到 MongoDB 时跳过属性
本文关键字:MongoDB 保存 属性 情况下 BsonIgnore | 更新日期: 2023-09-27 18:26:46
我有一个类,其中包含一个字段,我想在将对象保存到MongoDB时跳过该字段。
public class Person
{
public string name;
public string ignorable; // I don't want this one to be saved to the db
}
我知道 BsonIgnore
属性,但在序列化要发送到客户端 javascript 应用程序的对象时,这也忽略了该属性。
我使用官方的 C# 驱动程序,并在对象上直接调用此扩展方法以序列化为 json:
MongoDB.Bson.BsonExtensionMethods.ToJson()
另一种解决方案:可以将实体类对象强制转换为BsonDocument
并调用remove
方法来删除不需要的字段。最重要的是,实际上您应该在MongoCollection
对象上调用Save
方法,以便仅更新包含的字段。
你可以编写自己的序列化程序和反序列化程序
public class PersonSerialzer : IBsonSerializer
{
public object Deserialize(BsonReader bsonReader, Type nominalType, IBsonSerializationOptions options)
{
....
}
public object Deserialize(BsonReader bsonReader, Type nominalType, Type actualType, IBsonSerializationOptions options)
{
....
}
public IBsonSerializationOptions GetDefaultSerializationOptions()
{
....
}
public void Serialize(BsonWriter bsonWriter, Type nominalType, object value, IBsonSerializationOptions options)
{
var person = (Person)value;
bsonWriter.WriteStartDocument();
bsonWriter.WriteString("name", person.name);
//bsonWriter.WriteString("ignorable", person.ignorable); ignore for serialize
bsonWriter.WriteEndDocument();
}
}
Deserialize
方法很简单Serialize
方法。
然后通过以下方式注册
var ser = new PersonSerialzer();
BsonSerializer.RegisterSerializer(typeof(Person), ser);