Esempio n. 1
0
        /// <summary>
        /// 得到填充对象
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="propertyName"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        protected virtual void SetManyOrmProperty(object entity, string propertyName, string value)
        {
            if (string.IsNullOrEmpty(value))
            {
                return;
            }
            var subEntity = entity;
            var names     = propertyName.Split('.');

            for (int i = 0; i < names.Length - 1; i++)
            {
                subEntity = CompilerHelper.GetAndFillProperty(subEntity, names[i]);
            }
            var property =
                subEntity.GetType().GetProperties().FirstOrDefault(it => it.Name.Equals(names[names.Length - 1]));

            if (property == null)
            {
                return;
            }
            var elements    = new ArrayList();
            var elementType = GetPropertyElementType(property.PropertyType);
            var doc         = new XmlDocument();

            doc.LoadXml(string.Format("<sysroot>{0}</sysroot>", value));
            foreach (XmlNode node in doc.FirstChild.ChildNodes)
            {
                var element = Activator.CreateInstance(elementType);
                foreach (XmlNode nd in node.ChildNodes)
                {
                    var name = GetPropertyName(nd.Name);
                    if (nd.ChildNodes.Count == 1 && nd.FirstChild.NodeType == XmlNodeType.Text)
                    {
                        element.SetProperty(name, GetPropertyTypeByName(element, name).TryConvertValue(nd.InnerText));
                    }
                    else
                    {
                        SetManyOrmProperty(element, name, nd.InnerXml);
                    }
                }
                elements.Add(element);
            }
            subEntity.SetProperty(names[names.Length - 1], elements.ToArray(elementType));
        }