c# - 如何使用变量作为类型

标签 c# wcf transfer

我想将 BusinessObjects 从一台 PC 转移到另一台 PC。如果我考虑使用大约 40 种不同的对象类型来传输不同对象的许多契约(Contract)的使用,对于始终相同的任务来说似乎是相当多的重载:“将对象 A 发送到计算机 B 并将对象保存到 DB”(对象都有一个持久化方法)。

由于对象可以有很多不同的类型,我只想使用一个泛型方法来:

  1. 序列化一个 BO 对象
  2. 转移到另一台电脑上
  3. 反序列化为正确的类型
  4. 进行一致性检查
  5. 保存到数据库
  6. 是我的问题。

目前我正在考虑将类型作为 eytra 信息发送。 然后我想做类似的事情:

BinaryFormatter aFormatter = new BinaryFormatter();
aFormatter.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;
Object.ParseTypeFromString(aObjektType) aObject = aFormatter.Deserialize(stream) as Object.ParseTypeFromString(aObjektType);

然后只需使用基础对象的泛型方法将对象保存到数据库,以保持传输类尽可能简单。

有没有可能做这样的事情?还是我走的方向完全错误,用另一种方法更容易完成这项任务?

最佳答案

如果您事先不知道类型,您不能目前在 C# 中做任何取决于类型的事情。 BinaryFormatter已经使用正确的对象类型对其进行反序列化,但您的代码通常可以将对象引用为...。object:

object aObject = aFormatter.Deserialize(stream);

此时,您有多种选择:

  • 使用通用接口(interface)/基类
  • 使用dynamic(dynamic 的有趣用法包括调用最合适的方法重载,以及切换到通用方法)
  • 使用isasGetType() 显式测试类型,用于特殊情况

以中间选项为例:

object aObject = aFormatter.Deserialize(stream);
GenericMagic((dynamic)aObject);
OverloadMagic((dynamic)aObject);

...

void GenericMagic<T>(T obj) // possibly some constraints here too
{
    T x = ... // now we *have* the type, but as `T`;
              // of course, you still can't do many exciting
              // things unless you add constraints
}

// the correct one of these will be chosen at runtime...
void OverloadMagic(Customer cust) {...}
void OverloadMagic(User user) {...}
void OverloadMagic(Order order) {...}

坦率地说,如果我不得不反序列化(等)某些未知的东西,我通常更愿意保持非泛型,只使用objectGetType() ,也许还有一些反射(reflection) - 它仍然是泛型,即使它不使用泛型

关于c# - 如何使用变量作为类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12794464/

相关文章:

c# - 将频率转换为-1..1浮点

c# - Geolocator.RequestAccessAsync 始终返回拒绝状态

c# - gRPC 相当于 WCF 服务发现

.net - Ninject WCF 扩展 ArgumentNullException 使用 NET.TCP 绑定(bind)

c# - 在 Global.asax 中验证 HTTP 请求和返回特定 HTTP 响应的正确方法是什么?

c# - 将数字数组作为文本传输的大小有效的方法

c# - 为什么我从 Web API Controller 上的 Post 方法得到一个空值?

c# - 为什么 cookie.domain 设置两个 cookie?

c# - 如何在 c sharp 中同时通过 tcp 发送多个文件?

mysql - 将Mysql数据库转移到另一台计算机