public void SetValue(object targetResource, string propertyName, object propertyValue) { var resourceType = GetResourceType(targetResource); var annotation = (TypedResourceTypeAnnotation)resourceType.CustomState; var memberMap = annotation.ClassMap.GetMemberMap(propertyName); var serializer = memberMap.GetSerializer(memberMap.MemberType) as IBsonArraySerializer; if (serializer != null) { var itemSerializationInfo = serializer.GetItemSerializationInfo(); var array = itemSerializationInfo.SerializeValues((IEnumerable)propertyValue); var memberMapSerializationInfo = new BsonSerializationInfo(memberMap.ElementName, serializer, memberMap.MemberType, memberMap.SerializationOptions); propertyValue = memberMapSerializationInfo.DeserializeValue(array); } memberMap.Setter(targetResource, propertyValue); if (_rememberedInstances.Contains(targetResource)) { return; } var collection = GetCollection(resourceType); _rememberedInstances.Add(targetResource); _actions.Add(() => collection.Save(resourceType.InstanceType, targetResource)); }