Catel.Runtime.Serialization.ObjectAdapter.SetMemberValue C# (CSharp) Method

SetMemberValue() public method

Sets the member value.
public SetMemberValue ( object model, MemberValue member, Catel.Runtime.Serialization.SerializationModelInfo modelInfo ) : void
model object The model.
member MemberValue The member.
modelInfo Catel.Runtime.Serialization.SerializationModelInfo The model information.
return void
        public virtual void SetMemberValue(object model, MemberValue member, SerializationModelInfo modelInfo)
        {
            var modelType = model.GetType();

            try
            {
                var modelEditor = model as IModelEditor;
                if (modelEditor != null && modelInfo.CatelPropertyNames.Contains(member.Name))
                {
                    modelEditor.SetValueFastButUnsecure(member.Name, member.Value);
                }
                else if (modelInfo.PropertyNames.Contains(member.Name))
                {
                    var set = false;

                    var propertySerializable = model as IPropertySerializable;
                    if (propertySerializable != null)
                    {
                        set = propertySerializable.SetPropertyValue(member.Name, member.Value);
                    }

                    if (!set)
                    {
                        var memberMetadata = modelInfo.PropertiesByName[member.Name];
                        if (memberMetadata != null)
                        {
                            ((PropertyInfo)memberMetadata.Tag).SetValue(model, member.Value, null);
                            set = true;
                        }
                    }

                    if (!set)
                    {
                        Log.Warning("Failed to set property '{0}.{1}' because the member cannot be found on the model", modelType.GetSafeFullName(false), member.Name);
                    }
                }
                else if (modelInfo.FieldNames.Contains(member.Name))
                {
                    var set = false;

                    var fieldSerializable = model as IFieldSerializable;
                    if (fieldSerializable != null)
                    {
                        set = fieldSerializable.SetFieldValue(member.Name, member.Value);
                    }

                    if (!set)
                    {
                        var memberMetadata = modelInfo.FieldsByName[member.Name];
                        if (memberMetadata != null)
                        {
                            ((FieldInfo)memberMetadata.Tag).SetValue(model, member.Value);
                            set = true;
                        }
                    }

                    if (!set)
                    {
                        Log.Warning("Failed to set field '{0}.{1}' because the member cannot be found on the model", modelType.GetSafeFullName(false), member.Name);
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Warning(ex, "Failed to populate '{0}.{1}', setting the member value threw an exception", modelType.GetSafeFullName(false), member.Name);
            }
        }
    }