/* Copyright 2010-2014 MongoDB Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; namespace MongoDB.Bson.Serialization { /// /// A class backed by a BsonDocument. /// public abstract class BsonDocumentBackedClass { // private fields private readonly BsonDocument _backingDocument; private readonly IBsonDocumentSerializer _serializer; // constructors /// /// Initializes a new instance of the class. /// /// The serializer. protected BsonDocumentBackedClass(IBsonDocumentSerializer serializer) : this(new BsonDocument(), serializer) { } /// /// Initializes a new instance of the class. /// /// The backing document. /// The serializer. protected BsonDocumentBackedClass(BsonDocument backingDocument, IBsonDocumentSerializer serializer) { if (backingDocument == null) { throw new ArgumentNullException("backingDocument"); } if (serializer == null) { throw new ArgumentNullException("serializer"); } _backingDocument = backingDocument; _serializer = serializer; } // protected internal properties /// /// Gets the backing document. /// protected internal BsonDocument BackingDocument { get { return _backingDocument; } } // protected methods /// /// Gets the value from the backing document. /// /// The type of the value. /// The member name. /// The default value. /// The value. protected T GetValue(string memberName, T defaultValue) { var info = _serializer.GetMemberSerializationInfo(memberName); BsonValue bsonValue; if (!_backingDocument.TryGetValue(info.ElementName, out bsonValue)) { return defaultValue; } return (T)info.DeserializeValue(bsonValue); } /// /// Sets the value in the backing document. /// /// The member name. /// The value. protected void SetValue(string memberName, object value) { var info = _serializer.GetMemberSerializationInfo(memberName); var bsonValue = info.SerializeValue(value); _backingDocument.Set(info.ElementName, bsonValue); } } }