是否可以反序列化(c#)一块xml,csv,json(不管它是什么),而不知道它的类型?但是要给一个对象(最终是正确的类型)?
答案 0 :(得分:2)
这取决于序列化。
BinarySerializer将类型信息嵌入到其输出流中,因此您描述的内容将完美运行。你得到一个对象,你甚至可以对它进行反射,然后将其转换为正确的类型。
XML序列化不能像那样工作,这就是XmlSerializer在其构造函数中需要一个类型的原因。
在数据可能是有限数量类型之一的情况下,您最好,所有类型都从基类型继承。然后你可以给出基类型(用已知类型属性修饰,让它知道它可能是的所有其他类型),然后将数据反序列化为标准基类型,然后检查它。
CSV和JSON更加困难,因为框架中没有很多序列化支持。
答案 1 :(得分:2)
是的,这是可能的。
序列化的XML / CSV / JSON数据必须包含标识符,以允许反序列化器知道要创建的对象类型,因为事先无法知道。因此,反序列化器可以构造新的对象实例,通常采用FactoryMethod设计模式。
反序列化比序列化更难。
答案 2 :(得分:1)
不是以任何简单的方式。您必须编写逻辑来分析数据并确定其格式最接近的类型。
答案 3 :(得分:1)
通常是的。但这取决于您使用的序列化。序列化数据必须包含有关序列化对象类型的元数据。例如,xml序列化(System.Xml.Serialization)不支持此方案。