Пример #1
0
        /// <summary>
        ///     Convert xml element to its representing object.
        /// </summary>
        /// <param name="objType">Type of the result object.</param>
        /// <param name="element">The xml elemnt to convert.</param>
        /// <param name="settings">
        ///     Convert settings used during the convertion. <see cref="XConvertSettings.Default" /> will be used if the value is
        ///     <see langword="null" />.
        /// </param>
        /// <returns>Object that converted from <paramref name="element" />.</returns>
        /// <exception cref="ArgumentNullException">
        ///     <paramref name="objType" /> or <paramref name="element" /> is <see langword="null" />.
        /// </exception>
        public static object ToObject(Type objType, XElement element, XConvertSettings settings = null)
        {
            Ensure.Argument.NotNull(objType, "objType");
            Ensure.Argument.NotNull(element, "element");

            settings = settings ?? XConvertSettings.Default;

            var converter = settings.FindConverter(objType);

            return(converter.ToObject(objType, element, settings));
        }
Пример #2
0
        public static void PopulateObject(object obj, XElement element, XConvertSettings settings = null)
        {
            Ensure.Argument.NotNull(obj, "obj");
            Ensure.Argument.NotNull(element, "element");

            settings = settings ?? XConvertSettings.Default;

            var converter = settings.FindConverter(obj.GetType());

            converter.PopulateObject(obj, element, settings);
        }
Пример #3
0
        /// <summary>
        ///     Convert an object to xml element.
        /// </summary>
        /// <param name="name">Name of the element.</param>
        /// <param name="obj">The object to convert.</param>
        /// <param name="settings">
        ///     Convert settings used during the convertion. <see cref="XConvertSettings.Default" /> will be used if the value is
        ///     <see langword="null" />.
        /// </param>
        /// <returns>An instance of <see cref="XElement" /> that represents <paramref name="obj" />.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="obj" /> is <see langword="null" />.</exception>
        public static XElement ToElement(string name, object obj, XConvertSettings settings = null)
        {
            Ensure.Argument.NotNull(obj, "obj");

            settings = settings ?? XConvertSettings.Default;

            var type      = obj.GetType();
            var converter = settings.FindConverter(type);

            return(converter.ToElement(name, type, obj, settings));
        }
Пример #4
0
        protected override void PopulateElementChildren(
            XElement element, Type declareType, object obj, XConvertSettings settings)
        {
            if (obj == null)
            {
                return;
            }

            var actualType = obj.GetType();

            Ensure.Argument.Is(actualType, "obj", declareType);

            foreach (var members in EnumMembers(obj))
            {
                var memberCount = members.Count();
                foreach (var member in members)
                {
                    Type   declareMemberType = null;
                    Type   actualMemberType  = null;
                    object value             = null;

                    var field = member as FieldInfo;
                    if (field != null)
                    {
                        declareMemberType = field.FieldType;
                        value             = field.GetValue(obj);
                        if (value != null)
                        {
                            actualMemberType = value.GetType();
                        }
                    }

                    var property = member as PropertyInfo;
                    if (property != null && property.CanRead)
                    {
                        declareMemberType = property.PropertyType;
                        value             = property.GetValue(obj, null);
                        if (value != null)
                        {
                            actualMemberType = value.GetType();
                        }
                    }

                    var memberType = actualMemberType ?? declareMemberType;
                    var converter  = settings.FindConverter(memberType);

                    var name          = memberCount > 1 ? GetHierachicalMemberName(actualType, member) : member.Name;
                    var memberElement = converter.ToElement(name, declareMemberType, value, settings);
                    element.Add(memberElement);
                }
            }
        }
Пример #5
0
        protected override void PopulateObjectImpl(object obj, XElement element, XConvertSettings settings)
        {
            var objType     = obj.GetType();
            var membersDict = GetMembers(obj);

            foreach (var memberElement in element.Elements())
            {
                string     name;
                MemberInfo member;
                GetMemberInfo(objType, membersDict, memberElement, out name, out member);
                if (member == null)
                {
                    switch (MissingMemberHandling)
                    {
                    case MissingMemberHandling.Ignore:
                        continue;

                    case MissingMemberHandling.ThrowException:
                        throw new MissingMemberException(objType.FullName, name);

                    default:
                        continue;
                    }
                }

                var declareMemberType = GetDeclareMemberType(member);
                var actualMemberType  = XConvertUtil.ParseType(memberElement);
                if (actualMemberType != null)
                {
                    if (actualMemberType != declareMemberType && !actualMemberType.IsSubclassOf(declareMemberType))
                    {
                        throw new XmlException(string.Format(
                                                   "Object(of type {0}) member type({1}) from xml does not match with its declare type({2}) of the object.",
                                                   objType, actualMemberType, declareMemberType));
                    }
                }

                var usingMemberType = actualMemberType ?? declareMemberType;
                var converter       = settings.FindConverter(usingMemberType);
                var value           = converter.ToObject(usingMemberType, memberElement, settings);
                SetMemberValue(member, obj, value);
            }
        }