反序列化为匿名类型

时间:2012-10-12 07:38:20

标签: c# xml-serialization deserialization

  

可能重复:
  How to XML deserialize an object of Unknown Type?

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

我有一个Person类型的模型,只有2个属性(Name和Age),我可以序列化为XML。说到deserialise,据我所知,我必须告诉编译器类型是Person。随着通用T的世界,这似乎适得其反。我原本以为我可以将对象建立为一个'InMemoryOnly'对象(如果你能想象的话),它在运行时创建对象,就像它的参数/字段/属性等一样,都是基于XML的。也许就像一个匿名的类型;我很欣赏C#编译器在设计时必须忽略它,并且我们失去了intellisense,但是当所有对象都以任何方式传递给内存时,我无法理解为什么它会在运行时失败。或者也许这可以用Reflection?

无论如何,这就是我正在尝试做的事情,从XML反序列化为通用对象。这可能与C#有关吗?

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

据我所知,实现这一点的原因是序列化和反序列化必须知道类型(在本例中为Person)。因此,如果serailise和反序列化发生在WCF上(其中序列化和序列化发生在不同的程序集中)那么Person对象必须重复(这是违反DRY原则的)

1 个答案:

答案 0 :(得分:3)

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