【问题标题】:how to deserialize objects without knowing its type or existance of its class to cast如何在不知道要转换的类的类型或存在的情况下反序列化对象
【发布时间】:2012-11-21 01:38:47
【问题描述】:

大家好,请帮我一个忙,我有许多具有相同结构的自定义类,例如它们都有属性模式,并且它们的对象的属性对我序列化很重要,因为我想保存许多这些对象来自许多应用程序中的许多类作为日志记录系统,因此我无法在一个解决方案中收集所有类来反序列化它们。

如果我的解决方案中有类,我可以使用反射来获取它们的属性和值,并在数据表中导出属性或在反序列化之后,将对象转换为该类的类型,但我的问题是如何反序列化对象和获取对象属性的“类型”、“名称”和“值”,而不在我的解决方案中包含它们的类。

在这种情况下,当我想反序列化时,会收到以下错误消息:“缺少根元素。”

【问题讨论】:

  • 您最好评论一下您的编程语言是什么,因为不是每个人都需要强制转换。对于您的具体问题,序列化类定义然后实现它们有什么问题?如果您的语言支持完整的元对象协议,则应该没有大问题。
  • 即使您的解决方案中没有具有该类型的项目,您仍然需要知道该对象 - 您必须具有对包含该类型的 .dll 的引用。跨度>

标签: xml class object serialization reflection


【解决方案1】:

正如您所提到的,您可以通过反射检查反序列化的对象,并确保这将是您所能拥有的,除非您以某种方式拥有对象的类型,我的意思是以前在其他程序集中或在同一个程序集中编译。这意味着您毫无疑问需要组装!

但不要失去勇气。通过反射,您可以从对象中检索您想要的任何东西,除了对象类所在的域所必需的东西。例如,您可以拥有 Product 类的反序列化实例,但您无法识别 Product 类在做什么以及它的存在哲学是什么。这些东西放在与 Customer、Order、ProductLine、Stock 和该域的其他类相关的 Product 域中。

但再次希望您可以通过为您的类定义一些标准行为来克服这些问题,这些行为由所有领域中的所有类实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 2011-06-15
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多