Beispiel #1
0
        /// <summary>
        /// Serializes an object to a BSON byte array.
        /// </summary>
        /// <param name="obj">The object.</param>
        /// <param name="nominalType">The nominal type of the object..</param>
        /// <param name="writerSettings">The writer settings.</param>
        /// <param name="serializer">The serializer.</param>
        /// <param name="configurator">The serialization context configurator.</param>
        /// <param name="args">The serialization args.</param>
        /// <returns>A BSON byte array.</returns>
        /// <exception cref="System.ArgumentNullException">nominalType</exception>
        /// <exception cref="System.ArgumentException">serializer</exception>
        public static byte[] ToBson(
            this object obj,
            Type nominalType,
            BsonBinaryWriterSettings writerSettings = null,
            IBsonSerializer serializer = null,
            Action <BsonSerializationContext.Builder> configurator = null,
            BsonSerializationArgs args = default(BsonSerializationArgs))
        {
            if (nominalType == null)
            {
                throw new ArgumentNullException("nominalType");
            }
            args.SetOrValidateNominalType(nominalType, "nominalType");

            if (serializer == null)
            {
                serializer = BsonSerializer.LookupSerializer(nominalType);
            }
            if (serializer.ValueType != nominalType)
            {
                var message = string.Format("Serializer type {0} value type does not match document types {1}.", serializer.GetType().FullName, nominalType.FullName);
                throw new ArgumentException(message, "serializer");
            }

            using (var memoryStream = new MemoryStream())
            {
                using (var bsonWriter = new BsonBinaryWriter(memoryStream, writerSettings ?? BsonBinaryWriterSettings.Defaults))
                {
                    var context = BsonSerializationContext.CreateRoot(bsonWriter, configurator);
                    serializer.Serialize(context, args, obj);
                }
                return(memoryStream.ToArray());
            }
        }
Beispiel #2
0
 /// <summary>
 /// Serializes an object to a BsonDocument.
 /// </summary>
 /// <typeparam name="TNominalType">The nominal type of the object.</typeparam>
 /// <param name="obj">The object.</param>
 /// <param name="serializer">The serializer.</param>
 /// <param name="configurator">The serialization context configurator.</param>
 /// <param name="args">The serialization args.</param>
 /// <returns>A BsonDocument.</returns>
 public static BsonDocument ToBsonDocument <TNominalType>(
     this TNominalType obj,
     IBsonSerializer <TNominalType> serializer = null,
     Action <BsonSerializationContext.Builder> configurator = null,
     BsonSerializationArgs args = default(BsonSerializationArgs))
 {
     args.SetOrValidateNominalType(typeof(TNominalType), "<TNominalType>");
     return(ToBsonDocument(obj, typeof(TNominalType), serializer, configurator, args));
 }
Beispiel #3
0
 /// <summary>
 /// Serializes an object to a JSON string.
 /// </summary>
 /// <typeparam name="TNominalType">The nominal type of the object.</typeparam>
 /// <param name="obj">The object.</param>
 /// <param name="writerSettings">The JsonWriter settings.</param>
 /// <param name="serializer">The serializer.</param>
 /// <param name="configurator">The serializastion context configurator.</param>
 /// <param name="args">The serialization args.</param>
 /// <returns>
 /// A JSON string.
 /// </returns>
 public static string ToJson <TNominalType>(
     this TNominalType obj,
     JsonWriterSettings writerSettings         = null,
     IBsonSerializer <TNominalType> serializer = null,
     Action <BsonSerializationContext.Builder> configurator = null,
     BsonSerializationArgs args = default(BsonSerializationArgs))
 {
     args.SetOrValidateNominalType(typeof(TNominalType), "<TNominalType>");
     return(ToJson(obj, typeof(TNominalType), writerSettings, serializer, configurator, args));
 }
Beispiel #4
0
        /// <summary>
        /// Serializes an object to a BsonDocument.
        /// </summary>
        /// <param name="obj">The object.</param>
        /// <param name="nominalType">The nominal type of the object.</param>
        /// <param name="serializer">The serializer.</param>
        /// <param name="configurator">The serialization context configurator.</param>
        /// <param name="args">The serialization args.</param>
        /// <returns>A BsonDocument.</returns>
        /// <exception cref="System.ArgumentNullException">nominalType</exception>
        /// <exception cref="System.ArgumentException">serializer</exception>
        public static BsonDocument ToBsonDocument(
            this object obj,
            Type nominalType,
            IBsonSerializer serializer = null,
            Action <BsonSerializationContext.Builder> configurator = null,
            BsonSerializationArgs args = default(BsonSerializationArgs))
        {
            if (nominalType == null)
            {
                throw new ArgumentNullException("nominalType");
            }
            args.SetOrValidateNominalType(nominalType, "nominalType");

            if (obj == null)
            {
                return(null);
            }

            if (serializer == null)
            {
                var bsonDocument = obj as BsonDocument;
                if (bsonDocument != null)
                {
                    return(bsonDocument); // it's already a BsonDocument
                }

                var convertibleToBsonDocument = obj as IConvertibleToBsonDocument;
                if (convertibleToBsonDocument != null)
                {
                    return(convertibleToBsonDocument.ToBsonDocument()); // use the provided ToBsonDocument method
                }

                serializer = BsonSerializer.LookupSerializer(nominalType);
            }
            if (serializer.ValueType != nominalType)
            {
                var message = string.Format("Serializer type {0} value type does not match document types {1}.", serializer.GetType().FullName, nominalType.FullName);
                throw new ArgumentException(message, "serializer");
            }

            // otherwise serialize into a new BsonDocument
            var document = new BsonDocument();

            using (var bsonWriter = new BsonDocumentWriter(document))
            {
                var context = BsonSerializationContext.CreateRoot(bsonWriter, configurator);
                serializer.Serialize(context, args, obj);
            }
            return(document);
        }