代码之家  ›  专栏  ›  技术社区  ›  Paul

在反序列化之前不知道类型

  •  5
  • Paul  · 技术社区  · 16 年前

    是否可以反序列化(c)一段XML、csv、json(无论它是什么),而不知道它的类型?但是要被退回一个对象(最终哪个类型是正确的)?

    4 回复  |  直到 16 年前
        1
  •  2
  •   bbudge    16 年前

    是的,这是可能的。

    序列化的xml/csv/json数据必须包含标识符,以允许反序列化程序知道要创建什么类型的对象,因为这不能预先知道。为了使反序列化程序能够构造新的对象实例,通常使用FactoryMethod设计模式。

    反序列化比序列化更难。

        2
  •  2
  •   David Boike    16 年前

    这取决于序列化。

    Binaryserializer将类型信息嵌入到其输出流中,因此您所描述的内容将非常有效。你得到一个对象,你甚至可以对它进行反射,然后把它转换成正确的类型。

    XML序列化不能这样工作,这就是为什么XML序列化程序在其构造函数中需要一个类型的原因。

    在数据可能是有限数量的类型之一(所有类型都继承自基类型)的情况下,最好是这样。然后,您可以给基类型(它用已知的类型属性进行修饰,以便让它知道所有其他类型的信息),然后将数据反序列化为标准的基类型,然后检查它。

    csv和json甚至更加困难,因为没有太多的序列化支持将它们移植到框架中。

        3
  •  1
  •   John Nelson    16 年前

    不是以任何简单的方式。您必须编写逻辑来分析数据,并决定其格式最相似的类型。

        4
  •  1
  •   TcKs    16 年前

    通常是的。但这取决于您使用哪种序列化。序列化数据必须包含有关序列化对象类型的元数据。例如,XML序列化(system.xml.serialization)不支持此方案。