如何在不使用BsonIgnore的情况下保存到MongoDB时跳过属性?

时间:2014-10-16 21:55:22

标签: javascript c# json mongodb

我有一个类,我想在将对象保存到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()

2 个答案:

答案 0 :(得分:1)

您可以编写自己的序列化程序&解串器

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);

答案 1 :(得分:1)

另一个解决方案: 您可以将实体类对象强制转换为BsonDocument并调用remove方法以删除您不需要的字段。 最重要的是,您应该在Save对象上调用MongoCollection方法,以便只更新包含的字段。