4

可能重复:
如何 XML 反序列化未知类型的对象?

我刚刚开始玩序列化和反序列化。

我有一个 Person 类型的模型,只有 2 个属性(姓名和年龄),我可以序列化为 XML。说到反序列化,据我所知,我必须告诉编译器类型是 Person。对于通用 T 的世界,这似乎适得其反。我原以为我可以将对象建立为“InMemoryOnly”对象(如果您可以想象的话),该对象是在运行时创建的,它的参数/字段/属性等都是基于 XML 的。也许像匿名类型;我很欣赏 C# 编译器在设计时必须忽略这一点,并且我们会失去智能感知,但由于所有对象都以任何方式传递到内存,我不明白为什么它会在运行时失败。或者也许这可以通过反射实现?

无论如何,这就是我想要做的,从 XML 反序列化为通用对象。这可以用 C# 实现吗?

编辑刚刚发现了一个骗子,所以现在的问题是为什么 C# (.NET) 不能这样做?我知道答案可能是“因为它没有”,但我的问题是它是否可能或者比程序员的价值更麻烦?

据我所知,这样做的原因是,要完成此操作意味着序列化和反序列化必须知道类型(在本例中为 Person)。因此,如果 serailise 和反序列化发生在 WCF 上(其中序列化和序列化发生在不同的程序集中),则必须复制 Person 对象(这违反了 DRY 原则)

4

1 回答 1

3

WCF 示例没有证明这样做的正当理由。
你可以——而且可以!- 将 Person 类放在服务器和客户端都使用的程序集中。这就是我在使用 WCF 时的做法。
如果您不想这样做,Visual Studio 会在您添加服务引用时自动生成服务中使用的类型。
在这两种情况下,您只需要在一个地方更新Person课程。

于 2012-10-12T07:54:48.243 回答