Catel.Runtime.Serialization.ObjectAdapter.GetMemberValue C# (CSharp) Метод

GetMemberValue() публичный Метод

Gets the member value.
public GetMemberValue ( object model, string memberName, Catel.Runtime.Serialization.SerializationModelInfo modelInfo ) : MemberValue
model object The model.
memberName string Name of the member.
modelInfo Catel.Runtime.Serialization.SerializationModelInfo The model information.
Результат MemberValue
        public virtual MemberValue GetMemberValue(object model, string memberName, SerializationModelInfo modelInfo)
        {
            var modelType = model.GetType();

            try
            {
                var modelEditor = model as IModelEditor;
                if (modelEditor != null && modelInfo.CatelPropertyNames.Contains(memberName))
                {
                    var memberMetadata = modelInfo.CatelPropertiesByName[memberName];
                    var actualPropertyValue = modelEditor.GetValueFastButUnsecure(memberName);

                    var propertyValue = new MemberValue(SerializationMemberGroup.CatelProperty, modelType, memberMetadata.MemberType, 
                        memberMetadata.MemberName, memberMetadata.MemberNameForSerialization, actualPropertyValue);
                    return propertyValue;
                }

                if (modelInfo.PropertiesByName.ContainsKey(memberName))
                {
                    var memberMetadata = modelInfo.PropertiesByName[memberName];

                    object value = null;
                    var get = false;

                    var propertySerializable = model as IPropertySerializable;
                    if (propertySerializable != null)
                    {
                        get = propertySerializable.GetPropertyValue(memberName, ref value);
                    }

                    if (!get)
                    {
                        value = ((PropertyInfo)memberMetadata.Tag).GetValue(model, null);
                    }

                    var propertyValue = new MemberValue(SerializationMemberGroup.RegularProperty, modelType, memberMetadata.MemberType, 
                        memberMetadata.MemberName, memberMetadata.MemberNameForSerialization, value);
                    return propertyValue;
                }

                if (modelInfo.FieldsByName.ContainsKey(memberName))
                {
                    var memberMetadata = modelInfo.FieldsByName[memberName];

                    object value = null;
                    var get = false;

                    var fieldSerializable = model as IFieldSerializable;
                    if (fieldSerializable != null)
                    {
                        get = fieldSerializable.GetFieldValue(memberName, ref value);
                    }

                    if (!get)
                    {
                        value = ((FieldInfo)memberMetadata.Tag).GetValue(model);
                    }

                    var fieldValue = new MemberValue(SerializationMemberGroup.Field, modelType, memberMetadata.MemberType, 
                        memberMetadata.MemberName, memberMetadata.MemberNameForSerialization, value);
                    return fieldValue;
                }
            }
            catch (Exception ex)
            {
                Log.Warning(ex, "Failed to get value of member '{0}.{1}', skipping item during serialization", modelType.GetSafeFullName(false), memberName);
            }

            return null;
        }