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