我有两个来自同一个表的LINQ2SQL生成的类,因此它们具有完全相同的属性.
我想将一个对象转换/转换为另一个类.最简单的方法是什么?
我知道我可以手动分配每个属性,但这是很多代码.
您可以通过创建SerializationBinder使用序列化来轻松创建副本.这将允许您从一种类型反序列化到另一种类型.
class MySerializationBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
Type typeToDeserialize = null;
// To return the type, do this:
if(typeName == "TypeToConvertFrom")
{
typeToDeserialize = typeof(TypeToConvertTo);
}
return typeToDeserialize;
}
}
Run Code Online (Sandbox Code Playgroud)
只要类型属性排成一行,就可以使用它来序列化From类型,然后使用BinaryFormatter反序列化为To类型,并将Binder属性设置为binder类的实例.如果您有多种类型的对象,则可以使用一个Binder来覆盖所有不同类型.
反射是另一种可以解决此问题的方法.如果属性名称完全相同,您可以编写一个简单的方法,该方法从一个属性获取值并分配给同名的属性.
public static void CopyObject(object source, object destination)
{
var props = source.GetType().GetProperties();
foreach (var prop in props)
{
PropertyInfo info = destination.GetType().GetProperty(prop.Name);
if (info != null)
{
info.SetValue(destination, prop.GetValue(source, null), null);
}
}
}
Run Code Online (Sandbox Code Playgroud)