[PropertyDescription("物料编号", ProperVlaue = "MATERIAL_ID", DefaultValue = "MaterialId")]
public int MATERIAL_ID { get; set; }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Collections;
namespace SKY.DEFINITION
{
/// <summary>
/// 范小军
/// </summary>
public enum EnumDBFieldUsage
{
/// <summary>
/// 未定义。
/// </summary>
None = 0x00,
/// <summary>
/// 用于主键。
/// </summary>
PrimaryKey = 0x01,
/// <summary>
/// 用于唯一键。
/// </summary>
UniqueKey = 0x02,
/// <summary>
/// 由系统控制该字段的值。
/// </summary>
BySystem = 0x04
}
/// <summary>
/// 用来获取属性描述信息的类
/// 范小军
/// 2012-01-05
/// </summary>
[AttributeUsage(AttributeTargets.Property, Inherited = true)]
public class PropertyDescriptionAttribute : Attribute
{
EnumDBFieldUsage m_usage;
string m_strFieldName;
string m_strDescription;
string m_strProperName;
object m_defaultValue;
public PropertyDescriptionAttribute(string strFieldName, object defaultValue, EnumDBFieldUsage usage, string strDescription)
{
m_strFieldName = strFieldName;
m_defaultValue = defaultValue;
m_usage = usage;
m_strDescription = strDescription;
}
public PropertyDescriptionAttribute(string strFieldName,string strProperName, object defaultValue, EnumDBFieldUsage usage, string strDescription)
{
m_strFieldName = strFieldName;
m_strProperName = strProperName;
m_defaultValue = defaultValue;
m_usage = usage;
m_strDescription = strDescription;
}
public PropertyDescriptionAttribute(string fieldName)
: this(fieldName, null, EnumDBFieldUsage.None, null)
{ }
public PropertyDescriptionAttribute(string fieldName, EnumDBFieldUsage usage)
: this(fieldName, null, usage, null)
{ }
// 获取该成员映射的数据库字段名称。
public string FieldName
{
get
{
return m_strFieldName;
}
set
{
m_strFieldName = value;
}
}
// 获取该字段的默认值
public object DefaultValue
{
get
{
return m_defaultValue;
}
set
{
m_defaultValue = value;
}
}
// 获取该字段的默认值
public string ProperVlaue
{
get
{
return m_strProperName;
}
set
{
m_strProperName = value;
}
}
}
}
使用方法如下:
[PropertyDescription("物料编号", ProperVlaue = "MATERIAL_ID", DefaultValue = "MaterialId")]
public int MATERIAL_ID { get; set; }
可以通过前一章的反射类,获取相应的信息,方法如下:
/// <summary>
/// 获取一个属性的类型
/// </summary>
/// <param name="NameSpacestr"></param>
/// <param name="obj"></param>
/// <param name="PropertyName"></param>
/// <returns></returns>
public string getPropertyType(string NameSpacestr, string PropertyName)
{
Type t = Type.GetType(NameSpacestr);
string tempvalue = "";
foreach (PropertyInfo pi in t.GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
List<string> lpropername = new List<string>();
List<string> ldefault = new List<string>();
string temp = "";
object[] attrs = pi.GetCustomAttributes(typeof(PropertyDescriptionAttribute), true);
if (attrs.Length == 1)
{
PropertyDescriptionAttribute attr = (PropertyDescriptionAttribute)attrs[0];
lpropername.Add(attr.ProperVlaue);
ldefault.Add(attr.DefaultValue.ToString());
}
for (int i = 0; i < lpropername.Count; i++) {
if (ldefault[i].Equals(PropertyName))
{
temp = lpropername[i];
}
}
if (pi.Name.Equals(temp))
{
tempvalue = pi.PropertyType.Name.ToString();
break;
}
}
return tempvalue;
}
可以获取响应的信息。