1.1. 应用场景:
xml中配置一些重复的相同的属性,手工配置比较麻烦,需要一个程序自动配置。
2.1. 思路:
2.1.1. 编写实体类;
编写实体类的方法有许多种,第一、可以自己写一个实体类;第二、可以使用代码生成器;第三、可以使用entity framework database first;
我先贴一下实体代码:
using System; using System.Collections.Generic; public partial class students { public int? Id { get; set; } public string Name { get; set; } public int Sex { get; set; } public DateTime CreateDate { get; set; } public Product product { get; set; } }
针对以上的实体类,我作一些说明:
以上实体类主要是几个属性,属性名类型不一样,有int类型,有string类型,也有datetime和对象类型,其中我将它们分为三种:string、可空类型、原生类型(基本数据类型)。
为啥要分这几种类型,下面会讲到,这里先略过。
2.1.2. 编写方法,根据类名反射出来类的属性;
方法主要是写在一个按钮事件里面,通过点击一下按钮,然后将编写反射出来的类的属性拼接起来,显示在一个文本框中。看代码:
private void btnCreateXML_Click(object sender, EventArgs e) { //载入实体类所在的dll Assembly asmb = Assembly.LoadFrom("DataModel.dll"); //根据命名空间下的类名,获得类对象 Type typename = asmb.GetType("DataModel." + txtTableName.Text); StringBuilder str = new StringBuilder(); //根据类型对象,创建实例,再获得它的属性 foreach (PropertyInfo info in Activator.CreateInstance(typename).GetType().GetProperties()) { Type type = Type.GetType(info.PropertyType.FullName); if (type != null) { //属性有时候会有多种,我们需要排除非原生类型的 if (type.IsPrimitive || type.Name.Equals("String") || type.Name.Equals("Nullable`1")) { str.Append("<property "); str.Append(" name="" + info.Name + """); str.Append(" column="" + info.Name + """); if (type.Name.Equals("Nullable`1")) { int start = type.FullName.IndexOf("[[") + 2; int end = type.FullName.IndexOf(","); str.Append(" type="" + type.FullName.Substring(start, end - start) + """); } else { str.Append(" type="" + info.PropertyType.FullName + """); } str.Append("/>"); } } } txtResult.Text = str.ToString(); }