.Net 两个对像之间的映射
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Net; using System.Reflection; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { UserModel u = new UserModel(); u.UserName = "jinshuai"; u.Age = 1200; IdentityModel im = new IdentityModel(); im= ConvertType<PropertyMapAttribute,IdentityModel,UserModel>(u,im); Console.WriteLine(im.userName); Console.WriteLine(im.age); Console.Read(); } static T2 ConvertType<T1,T2,T3>(T3 SourceObj,T2 DestObj) { Type imt = DestObj.GetType(); Type ut = SourceObj.GetType(); PropertyInfo[] Parray = imt.GetProperties(); PropertyInfo[] UParray = ut.GetProperties(); foreach (PropertyInfo p in Parray) { PropertyInfo propert = imt.GetProperty(p.Name); object[] atarray = p.GetCustomAttributes(typeof(T1), true); var data = atarray.FirstOrDefault(); dynamic a = (T1)data; if (a != null) { foreach (PropertyInfo Up in UParray) { if (a.DestName == propert.Name && Up.Name == a.SourceName) { propert.SetValue(DestObj, Up.GetValue(SourceObj, null), null); } } } } return DestObj; } } public class UserModel { public string UserName { get; set; } public int Age { get; set; } } public class IdentityModel { [PropertyMapAttribute(SourceName = "UserName", DestName = "userName")] public string userName { get; set; } [PropertyMapAttribute(SourceName = "Age", DestName = "age")] public int age { get; set; } } [AttributeUsage( AttributeTargets.Property )] public class PropertyMapAttribute:Attribute { public string SourceName { get; set; } public string DestName { get; set; } } }
本代码只提供一种思路........
具体可能还有其它方法......
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。