/// <summary> /// Initializes a new instance of the <see cref="TypeToRegisterForBson{T}"/> class. /// </summary> /// <param name="memberTypesToInclude">Specifies which member types of <typeparamref name="T"/> that should also be registered.</param> /// <param name="relatedTypesToInclude">Specifies which types related to <typeparamref name="T"/> that should also be registered.</param> /// <param name="bsonSerializerBuilder">Builds an<see cref="IBsonSerializer"/>.</param> /// <param name="propertyNameWhitelist">The names of the properties to constrain the registration to.</param> public TypeToRegisterForBson( MemberTypesToInclude memberTypesToInclude, RelatedTypesToInclude relatedTypesToInclude, BsonSerializerBuilder bsonSerializerBuilder, IReadOnlyCollection <string> propertyNameWhitelist) : base(typeof(T), memberTypesToInclude, relatedTypesToInclude, bsonSerializerBuilder, propertyNameWhitelist) { }
/// <summary> /// Builds a <see cref="TypeToRegisterForBson"/> for a type using the most sensible settings, /// with a specified <see cref="IStringSerializeAndDeserialize"/> to use everywhere the type appears. /// </summary> /// <param name="type">The type to register.</param> /// <param name="stringSerializer">The string serializer to use for <paramref name="type"/>.</param> /// <returns> /// The type to register for BSON serialization. /// </returns> public static TypeToRegisterForBson ToTypeToRegisterForBsonUsingStringSerializer( this Type type, IStringSerializeAndDeserialize stringSerializer) { if (type == null) { throw new ArgumentNullException(nameof(type)); } if (stringSerializer == null) { throw new ArgumentNullException(nameof(stringSerializer)); } var serializer = StringSerializerBackedBsonSerializer.Build(type, stringSerializer); IBsonSerializer BsonSerializerBuilderFunc() => serializer; var bsonSerializerBuilder = new BsonSerializerBuilder(BsonSerializerBuilderFunc, BsonSerializerOutputKind.String); var result = new TypeToRegisterForBson(type, MemberTypesToInclude.None, RelatedTypesToInclude.Default, bsonSerializerBuilder, null); return(result); }
/// <summary> /// Initializes a new instance of the <see cref="TypeToRegisterForBson"/> class, specifying the origin types. /// </summary> /// <param name="type">The type to register.</param> /// <param name="recursiveOriginType">The type whose recursive processing of <paramref name="memberTypesToInclude"/> and <paramref name="relatedTypesToInclude"/> resulted in the creation of this <see cref="TypeToRegisterForBson"/>.</param> /// <param name="directOriginType">The type whose processing of <paramref name="memberTypesToInclude"/> and <paramref name="relatedTypesToInclude"/> directly resulted in the creation of this <see cref="TypeToRegisterForBson"/>.</param> /// <param name="memberTypesToInclude">Specifies which member types of <paramref name="type"/> that should also be registered.</param> /// <param name="relatedTypesToInclude">Specifies which types related to <paramref name="type"/> that should also be registered.</param> /// <param name="bsonSerializerBuilder">Builds an <see cref="IBsonSerializer"/>.</param> /// <param name="propertyNameWhitelist">The names of the properties to constrain the registration to.</param> public TypeToRegisterForBson( Type type, Type recursiveOriginType, Type directOriginType, MemberTypesToInclude memberTypesToInclude, RelatedTypesToInclude relatedTypesToInclude, BsonSerializerBuilder bsonSerializerBuilder, IReadOnlyCollection <string> propertyNameWhitelist) : base(type, recursiveOriginType, directOriginType, memberTypesToInclude, relatedTypesToInclude) { if (type == null) { throw new ArgumentNullException(nameof(type)); } if (recursiveOriginType == null) { throw new ArgumentNullException(nameof(recursiveOriginType)); } if (directOriginType == null) { throw new ArgumentNullException(nameof(directOriginType)); } if ((bsonSerializerBuilder != null) && (propertyNameWhitelist != null)) { throw new ArgumentException(Invariant($"{nameof(bsonSerializerBuilder)} and {nameof(propertyNameWhitelist)} cannot both be specified.")); } if (bsonSerializerBuilder != null) { if (memberTypesToInclude != MemberTypesToInclude.None) { throw new ArgumentException(Invariant($"{nameof(bsonSerializerBuilder)} is specified, but {nameof(Serialization.MemberTypesToInclude)} is not {MemberTypesToInclude.None}.")); } if (type.IsGenericTypeDefinition) { throw new NotSupportedException(Invariant($"{nameof(bsonSerializerBuilder)} is specified, but underlying type to register is an open generic.")); } } if (propertyNameWhitelist != null) { if (!propertyNameWhitelist.Any()) { throw new ArgumentException(Invariant($"'{nameof(propertyNameWhitelist)}' is an empty enumerable")); } if (propertyNameWhitelist.Any(string.IsNullOrWhiteSpace)) { throw new ArgumentException(Invariant($"'{nameof(propertyNameWhitelist)}' contains an element that is null or white space")); } if (memberTypesToInclude != MemberTypesToInclude.None) { throw new ArgumentException(Invariant($"{nameof(propertyNameWhitelist)} is specified, but {nameof(Serialization.MemberTypesToInclude)} is not {MemberTypesToInclude.None}.")); } if (relatedTypesToInclude != RelatedTypesToInclude.None) { throw new ArgumentException(Invariant($"{nameof(propertyNameWhitelist)} is specified, but {nameof(Serialization.RelatedTypesToInclude)} is not {RelatedTypesToInclude.None}.")); } if (type.IsGenericTypeDefinition) { throw new NotSupportedException(Invariant($"{nameof(propertyNameWhitelist)} is specified, but underlying type to register is an open generic.")); } } this.BsonSerializerBuilder = bsonSerializerBuilder; this.PropertyNameWhitelist = propertyNameWhitelist; }