c# - 转换不同类但相同类型的对象

标签 c# casting

我有两个由 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;
    }
}

只要类型属性对齐,您就可以使用它来序列化 From 类型,然后使用 BinaryFormatter 将 Binder 属性设置为绑定(bind)器类的实例反序列化为 To 类型。如果你有多种类型的对象,你可以使用一个 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);
       }
   }
}

关于c# - 转换不同类但相同类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/855283/

相关文章:

c# - 带发现的 WCF 失败,套接字在 XP 的上下文中无效?

c# - 如何选择视频文件并通过VideoLAN.LibVLC.UWP播放

java - 创建实用程序以将对象转换为 java 中的 bean

c# - 是否可以定义类对隐式转换尝试的响应?

python - numpy 数据类型转换在 x=x+a 和 x+=a 中的行为不同

c# - PayPal.Api 无法识别 App.config 文件

c# - 全局停用 FocusVisualStyle

c# - 如何在 C# 中不使用剪贴板从 Excel 保存图像?

c++ - 在 C++ 中将 DXVA2_Fixed32 类型转换为 Float

php - 在 php 中将变量转换为 boolean 值的最佳方法是什么?