/// <summary> /// a helper function to generate names /// </summary> /// <remarks></remarks> private static string GetSchemaPropertyNameInXmlHelper(object[] propertyAttributes, object value) { if (value != null) { foreach (object attribute in propertyAttributes) { if (attribute is System.Xml.Serialization.XmlAttributeAttribute) { return("@" + ((System.Xml.Serialization.XmlAttributeAttribute)attribute).AttributeName); } if (attribute is System.Xml.Serialization.XmlElementAttribute) { System.Xml.Serialization.XmlElementAttribute elementAttribute = (System.Xml.Serialization.XmlElementAttribute)attribute; Type elementType = elementAttribute.Type; if (elementType == null || elementType.IsInstanceOfType(value)) { if (value is XmlSchemaObject) { string itemName = GetSchemaItemName((XmlSchemaObject)value); if (itemName.Length > 0) { return(String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}[@name='{1}']", elementAttribute.ElementName, itemName)); } } return(elementAttribute.ElementName); } } if (attribute is System.Xml.Serialization.XmlAnyAttributeAttribute) { if (value is XmlAttribute) { return("@" + ((XmlAttribute)value).LocalName); } } if (attribute is System.Xml.Serialization.XmlAnyElementAttribute) { if (value is XmlElement) { return(((XmlElement)value).LocalName); } } if (attribute is System.Xml.Serialization.XmlTextAttribute) { if (value is XmlText) { return(((XmlText)value).Name); } } } } return(String.Empty); }
/// <summary> /// Helper method for writing the XML element. /// </summary> /// <param name="writer">The writer.</param> /// <param name="property">The property.</param> /// <param name="flow">The flow.</param> private void WriteXmlElement(XmlWriter writer, PropertyDescriptor property, object flow) { IEnumerable <System.Xml.Serialization.XmlElementAttribute> attribs = property.Attributes.OfType <System.Xml.Serialization.XmlElementAttribute>(); System.Xml.Serialization.XmlElementAttribute xmlAttrib = attribs.ElementAtOrDefault(0); if (xmlAttrib != null) { object prop = property.GetValue(flow); if (prop != null) { var serializer = Serialization.XmlSerializerFactory.GetSerializer(prop.GetType(), null); serializer.Serialize(writer, prop); } } }
public void Remove(System.Xml.Serialization.XmlElementAttribute attribute) { }
public void Insert(int index, System.Xml.Serialization.XmlElementAttribute attribute) { }
public int IndexOf(System.Xml.Serialization.XmlElementAttribute attribute) { return(default(int)); }
public bool Contains(System.Xml.Serialization.XmlElementAttribute attribute) { return(default(bool)); }
/// <summary> /// 根据映射方式获取实体或匿名对象的字段以及对应值的 Dictionary 列表 /// </summary> /// <param name="item">实体或匿名实体</param> /// <param name="smartMappingType">映射方式</param> /// <returns>字段或属性名称,值列表</returns> public static Dictionary <string, object> GetColumnDic(object item, FrameMappingType smartMappingType) { Type itemType = item.GetType(); Dictionary <string, object> list = new Dictionary <string, object>(); switch (smartMappingType) { case FrameMappingType.FrameAttributePublic: ////公有特性 case FrameMappingType.FrameAttributePrivate: ////私有特性 case FrameMappingType.FrameAttribute: ////根据特性映射,不区分公有私有 { ////根据特性标识设置属性 foreach (PropertyInfo propertyInfo in FrameReflection.GetPropertyInfoByAttribute <FrameColumnMappingAttributes>(itemType, smartMappingType)) { FrameColumnMappingAttributes attribute = Attribute.GetCustomAttribute(propertyInfo, typeof(FrameColumnMappingAttributes), false) as FrameColumnMappingAttributes; object value = propertyInfo.GetValue(item, null); list.Add(attribute.ColumnName, value); } ////根据特性标识设置字段 foreach (FieldInfo fieldInfo in FrameReflection.GetFieldInfoByAttribute <FrameColumnMappingAttributes>(itemType, smartMappingType)) { FrameColumnMappingAttributes attribute = Attribute.GetCustomAttribute(fieldInfo, typeof(FrameColumnMappingAttributes), false) as FrameColumnMappingAttributes; object value = fieldInfo.GetValue(item); list.Add(attribute.ColumnName, value); } } break; case FrameMappingType.XmlElementPublic: ////公有XmlElement case FrameMappingType.XmlElementPrivate: ////私有XmlElement case FrameMappingType.XmlElement: ////根据XmlElement映射,不区分公有私有 { ////根据特性标识设置属性 foreach (PropertyInfo propertyInfo in FrameReflection.GetPropertyInfoByAttribute <System.Xml.Serialization.XmlElementAttribute>(itemType, smartMappingType)) { System.Xml.Serialization.XmlElementAttribute attribute = Attribute.GetCustomAttribute(propertyInfo, typeof(System.Xml.Serialization.XmlElementAttribute), false) as System.Xml.Serialization.XmlElementAttribute; object value = propertyInfo.GetValue(item, null); list.Add(attribute.ElementName, value); } ////根据特性标识设置字段 foreach (FieldInfo fieldInfo in FrameReflection.GetFieldInfoByAttribute <System.Xml.Serialization.XmlElementAttribute>(itemType, smartMappingType)) { System.Xml.Serialization.XmlElementAttribute attribute = Attribute.GetCustomAttribute(fieldInfo, typeof(System.Xml.Serialization.XmlElementAttribute), false) as System.Xml.Serialization.XmlElementAttribute; object value = fieldInfo.GetValue(item); list.Add(attribute.ElementName, value); } } break; case FrameMappingType.Field: ////根据字段映射,私有公有均可 case FrameMappingType.FieldPrivate: ////根据私有字段映射 case FrameMappingType.FieldPublic: ////根据公有字段映射 { foreach (FieldInfo fieldInfo in FrameReflection.GetFieldInfos(itemType, smartMappingType)) { object value = fieldInfo.GetValue(item); list.Add(fieldInfo.Name, value); } } break; case FrameMappingType.Property: ////根据属性映射 私有公有均可 case FrameMappingType.PropertyPublic: ////根据公有属性映射 case FrameMappingType.ProertyPrivate: ////根据私有属性映射 { foreach (PropertyInfo propertyInfo in FrameReflection.GetPropertyInfos(itemType, smartMappingType)) { object value = propertyInfo.GetValue(item, null); list.Add(propertyInfo.Name, value); } } break; } return(list); }
/// <summary> /// 由一行数据生成一个实体 /// </summary> /// <typeparam name="T">目标实体类型</typeparam> /// <param name="dataRow">数据行</param> /// <param name="smartMappingType">反射方式</param> /// <param name="item">已实例化的实体</param> /// <param name="propertyInfos">属性</param> /// <param name="fieldInfos">字段</param> private static void GetEntity <T>(this DataRow dataRow, FrameMappingType smartMappingType, ref T item, PropertyInfo[] propertyInfos = null, FieldInfo[] fieldInfos = null) { Type itemType = item.GetType(); switch (smartMappingType) { case FrameMappingType.FrameAttributePublic: ////在公有字段或属性中查找特性 case FrameMappingType.FrameAttributePrivate: ////在私有字段或属性中查找特性 case FrameMappingType.FrameAttribute: ////在所有字段或属性中查找特性 { ////设置属性的值 foreach (PropertyInfo propertyInfo in propertyInfos = propertyInfos != null ? propertyInfos : FrameReflection.GetPropertyInfoByAttribute <FrameColumnMappingAttributes>(itemType, smartMappingType)) { FrameColumnMappingAttributes attribute = Attribute.GetCustomAttribute(propertyInfo, typeof(FrameColumnMappingAttributes), false) as FrameColumnMappingAttributes; if (dataRow.Table.Columns.Contains(attribute.ColumnName)) { object value = dataRow[attribute.ColumnName]; if (value == null || value.ToString().Trim() == string.Empty) { propertyInfo.SetValue(item, attribute.DefaultVale, null); } else { propertyInfo.SetValue(item, (value.GetType() == propertyInfo.PropertyType ? value : FrameReflection.ConvertTo(value.ToString().Trim(), propertyInfo.PropertyType)), null); } } else { propertyInfo.SetValue(item, attribute.DefaultVale, null); } } ////设置字段的值 foreach (FieldInfo fieldInfo in fieldInfos = fieldInfos != null ? fieldInfos : FrameReflection.GetFieldInfoByAttribute <FrameColumnMappingAttributes>(itemType, smartMappingType)) { FrameColumnMappingAttributes attribute = Attribute.GetCustomAttribute(fieldInfo, typeof(FrameColumnMappingAttributes), false) as FrameColumnMappingAttributes; if (dataRow.Table.Columns.Contains(attribute.ColumnName)) { object value = dataRow[attribute.ColumnName]; if (value == null || value.ToString().Trim() == string.Empty) { fieldInfo.SetValue(item, attribute.DefaultVale); } else { fieldInfo.SetValue(item, (value.GetType() == fieldInfo.FieldType ? value : FrameReflection.ConvertTo(value.ToString().Trim(), fieldInfo.FieldType))); } } else { fieldInfo.SetValue(item, attribute.DefaultVale); } } } break; case FrameMappingType.XmlElement: case FrameMappingType.XmlElementPrivate: case FrameMappingType.XmlElementPublic: { ////设置属性的值 foreach (PropertyInfo propertyInfo in propertyInfos = propertyInfos != null ? propertyInfos : FrameReflection.GetPropertyInfoByAttribute <System.Xml.Serialization.XmlElementAttribute>(itemType, smartMappingType)) { System.Xml.Serialization.XmlElementAttribute attribute = Attribute.GetCustomAttribute(propertyInfo, typeof(System.Xml.Serialization.XmlElementAttribute), false) as System.Xml.Serialization.XmlElementAttribute; if (dataRow.Table.Columns.Contains(attribute.ElementName)) { object value = dataRow[attribute.ElementName]; if (value == null || value.ToString().Trim() == string.Empty) { propertyInfo.SetValue(item, null, null); } else { propertyInfo.SetValue(item, (value.GetType() == propertyInfo.PropertyType ? value : FrameReflection.ConvertTo(value.ToString().Trim(), propertyInfo.PropertyType)), null); } } else { propertyInfo.SetValue(item, null, null); } } ////设置字段的值 foreach (FieldInfo fieldInfo in fieldInfos = fieldInfos != null ? fieldInfos : FrameReflection.GetFieldInfoByAttribute <System.Xml.Serialization.XmlElementAttribute>(itemType, smartMappingType)) { System.Xml.Serialization.XmlElementAttribute attribute = Attribute.GetCustomAttribute(fieldInfo, typeof(System.Xml.Serialization.XmlElementAttribute), false) as System.Xml.Serialization.XmlElementAttribute; if (dataRow.Table.Columns.Contains(attribute.ElementName)) { object value = dataRow[attribute.ElementName]; if (value == null || value.ToString().Trim() == string.Empty) { fieldInfo.SetValue(item, null); } else { fieldInfo.SetValue(item, (value.GetType() == fieldInfo.FieldType ? value : FrameReflection.ConvertTo(value.ToString().Trim(), fieldInfo.FieldType))); } } else { fieldInfo.SetValue(item, null); } } } break; case FrameMappingType.Field: ////按字段映射,不区分公有私有 case FrameMappingType.FieldPrivate: ////按私有字段映射 case FrameMappingType.FieldPublic: ////按公有字段映射 { ////设置字段的值 foreach (FieldInfo fieldInfo in fieldInfos = fieldInfos != null ? fieldInfos : FrameReflection.GetFieldInfos(itemType, smartMappingType)) { if (dataRow.Table.Columns.Contains(fieldInfo.Name)) { object value = dataRow[fieldInfo.Name]; if (value != null && value.ToString().Trim() != string.Empty) { fieldInfo.SetValue(item, (value.GetType() == fieldInfo.FieldType ? value : FrameReflection.ConvertTo(value.ToString(), fieldInfo.FieldType))); } } } } break; case FrameMappingType.Property: case FrameMappingType.ProertyPrivate: case FrameMappingType.PropertyPublic: { ////设置属性的值 foreach (PropertyInfo propertyInfo in propertyInfos = propertyInfos != null ? propertyInfos : FrameReflection.GetPropertyInfos(itemType, smartMappingType)) { if (dataRow.Table.Columns.Contains(propertyInfo.Name)) { object value = dataRow[propertyInfo.Name]; if (value != null && value.ToString().Trim() != string.Empty) { propertyInfo.SetValue(item, (value.GetType() == propertyInfo.PropertyType ? value : FrameReflection.ConvertTo(value.ToString(), propertyInfo.PropertyType)), null); } } } } break; } }
public int IndexOf(System.Xml.Serialization.XmlElementAttribute attribute) { throw null; }
public bool Contains(System.Xml.Serialization.XmlElementAttribute attribute) { throw null; }