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