C#将object对象转换为实体对象
#region Method1
///<summary>
///将object对象转换为实体对象
///</summary>
///<typeparam name="T">实体对象类名</typeparam>
///<param name="asObject">object对象</param>
///<returns></returns>
private T ConvertObject<T>(object asObject) where T : new()
{
//创建实体对象实例
var t = Activator.CreateInstance<T>();
if (asObject != null)
{
Type type = asObject.GetType();
//遍历实体对象属性
foreach (var info in typeof(T).GetProperties())
{
object obj = null;
//取得object对象中此属性的值
var val = type.GetProperty(info.Name)?.GetValue(asObject);
if (val != null)
{
//⾮泛型
if (!info.PropertyType.IsGenericType)
obj = Convert.ChangeType(val, info.PropertyType);
else//泛型Nullable<>
{
Type genericTypeDefinition = info.PropertyType.GetGenericTypeDefinition();
if (genericTypeDefinition == typeof(Nullable<>))
{
obj = Convert.ChangeType(val, Nullable.GetUnderlyingType(info.PropertyType));
}
else
{
obj = Convert.ChangeType(val, info.PropertyType);
}
}
info.SetValue(t, obj, null);
}
}
}object to
return t;
}
#endregion
View Code
///<summary>
///将object对象转换为实体对象
///</summary>
///<typeparam name="T">实体对象类名</typeparam>
///<param name="asObject">object对象</param>
/
//<returns></returns>
public static T ConvertObjectByJson<T>(object asObject) where T : new()        {
var serializer = new JavaScriptSerializer();
//将object对象转换为json字符
var json = serializer.Serialize(asObject);
//将json字符转换为实体对象
var t = serializer.Deserialize<T>(json);
return t;
}
#endregion
View Code
#region Method3
///<summary>
///将object尝试转为指定对象
///</summary>
///<param name="data"></param>
///<returns></returns>
public static T ConvertObjToModel<T>(object data) where T : new()
{
if (data == null) return new T();
// 定义集合
T result = new T();
// 获得此模型的类型
Type type = typeof(T);
string tempName = "";
// 获得此模型的公共属性
PropertyInfo[] propertys = result.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name;  // 检查object是否包含此列
// 判断此属性是否有Setter
if (!pi.CanWrite) continue;
try
{
object value = GetPropertyValue(data, tempName);
if (value != DBNull.Value)
{
Type tempType = pi.PropertyType;
pi.SetValue(result, GetDataByType(value, tempType), null);
}
}
catch
{ }
}
return result;
}
///获取⼀个类指定的属性值
///</summary>
///<param name="info">object对象</param>
///<param name="field">属性名称</param>
///<returns></returns>
public static object GetPropertyValue(object info, string field)
{
if (info == null) return null;
Type t = info.GetType();
IEnumerable<System.Reflection.PropertyInfo> property = from pi in t.GetProperties() where pi.Name.ToLower() == field.ToLower() select pi;
return property.First().GetValue(info, null);
}
///<summary>
///将数据转为制定类型
///</summary>
///<typeparam name="T"></typeparam>
///<param name="data1"></param>
///<returns></returns>
public static object GetDataByType(object data1, Type itype, params object[] myparams)
{
object result = new object();
try
{
if (itype == typeof(decimal))
{
result = Convert.ToDecimal(data1);
if (myparams.Length > 0)
{
result = Convert.ToDecimal(Math.Round(Convert.ToDecimal(data1), Convert.ToInt32(myparams[0])));
}
}
else if (itype == typeof(double))
{
if (myparams.Length > 0)
{
result = Convert.ToDouble(Math.Round(Convert.ToDouble(data1), Convert.ToInt32(myparams[0])));
}
else
{
result = double.Parse(Convert.ToDecimal(data1).ToString("0.00"));
}
}
else if (itype == typeof(Int32))
{
result = Convert.ToInt32(data1);
}
else if (itype == typeof(DateTime))
{
result = Convert.ToDateTime(data1);
}
else if (itype == typeof(Guid))
{
result = new Guid(data1.ToString());
}
else if (itype == typeof(string))
{
result = data1.ToString();
}
}
catch
{
if (itype == typeof(decimal))
if (itype == typeof(decimal))
{
result = 0;
}
else if (itype == typeof(double))                {
result = 0;
}
else if (itype == typeof(Int32))
{
result = 0;
}
else if (itype == typeof(DateTime))                {
result = null;
}
else if (itype == typeof(Guid))
{
result = Guid.Empty;
}
else if (itype == typeof(string))
{
result = "";
}
}
return result;
}
#endregion
View Code
#region Invoking
/// <summary>
/// test
/// </summary>
public void test()
{
var obj = new
{
id = 1,
name = "张三",
sex = 1,
age = 22
};
//转换
var userModel = ConvertObject<user>(obj);        }
/// <summary>
/// ⽤户
/// </summary>
public class user
{
/// <summary>
/// 编号
/// </summary>
public int id { set; get; }
/// <summary>
/// 姓名
/// </summary>
public string name { set; get; }
/// <summary>
/
// 性别
/// </summary>
public int sex { set; get; }
/// <summary>
/// 年龄
/// </summary>
public int age { set; get; }
}
#endregion

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。