在不知道object的实体类型时,如果把object转城它原本的实体
使用反射,typeof
这个只能采取运行时的反射机制进行解决,一般情况下未进行编译时会报错的,可以先使用泛型进行替代然后运行时启动反射机制
做一个判断
比如 已知两个实体类 Class A 和 Class B
未知类型。object C 可能是A或者B 中的一个类型
可以这么判断
if(C is A){
A data=(A)C;
}else if(C is B){
B data=(B)C;
}else{
//C既不是A也不是B。也可能是null
}
以此类推 data就是你要的结果
这个主要看你要怎么用,几百个你也是分开用的吧!在需要转换的地方进行判断和转换,然后针对具体类做响应地代码处置。
if(obj is A){
A a=obj as A;
a.****();//应用A类做相应处理
}
不如考虑一下泛型?都几百个类了就不考虑object了吧
C# 将object对象转换为实体对象.一共两种方法.
第一种方法,代码如下:
/// <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);
}
}
}
return t;
}
第二种方法
需引用
程序集:System.Web.Extensions.dll
命名空间:System.Web.Script.Serialization.
代码如下:
/// <summary>
/// 将object对象转换为实体对象
/// </summary>
/// <typeparam name="T">实体对象类名</typeparam>
/// <param name="asObject">object对象</param>
/// <returns></returns>
public static T ConvertObject<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;
}
调用方式:
/// <summary>
/// test
/// </summary>
public void test()
{
var obj = new {
id=1,name="张三",sex=1,age=22
};
//转换
user 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; }
}