我有一个对象InputFile
,它拥有数组和对象来存放文件的内容。我也有ABCFile
和XYZFile
,它们都是从InputFile
继承的,它们将读取不同类型的文件并将它们存储到InputFile
的投影成员中。继承对象的XML反序列化
由于这两个对象的序列化和反序列化都与父对象相同,所以我在父对象上实现了一个标准的XML序列化接口。在反序列化过程中,读取一些参数,调用Read
函数(加载文件),然后反序列化结束。
序列化的伟大工程,但(的List<InputFile>
)的反序列化不起作用,因为解串器调用父母存根Read
文件的功能,而不是ABCFile
或XYZFile
的。
如何获得反序列化来识别要使用的正确对象类型?我的List<InputFile>
可能有多种文件类型。
感谢
我用序列化对象的代码:
public class InputFileHolder : IXmlSerializable {
...
public void WriteXml(XmlWriter w) {
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
XmlSerializer ifXml = new XmlSerializer(typeof(List<InputFile>));
ifXml.Serialize(w, InputFiles, ns);
//More serialization
}
任何想法如何保持对象类型时,我的自定义序列化列表?
感谢您的快速回复。 生成的XML仍然类似于: ArrayOfInputFile>。 如果我手动编辑XML以将InputFile更改为ABCFile,则会失败,并显示错误的XML错误。 –
Aaron
2009-10-25 15:25:58
看看我的代码片段,并告诉我会发生什么 – 2009-10-25 20:25:07
好吧,它认为我发现了问题的根源。我的版本的InputFileHolder有一个IXmlSerializable接口,我可以自定义读/写要串行化的参数。如果我删除了IXmlSerializable接口并让框架处理它,那么我会得到类似于你的XML,其中指定了对象类型。我需要自定义阅读,所以我需要修复写。 我会在主帖中添加我的写代码。 – Aaron 2009-10-28 23:39:54