在C#,如何使用XmlSerializer
反序列化的對象可以是基類或任何幾種派生類的事先不知道類型?如何在事先不知道類型的情況下使用XmlSerializer反序列化可能是基類或派生類的對象?
我的派生類的所有添加額外的數據成員。我製作了一個簡單的GUI,可以對類對象進行序列化和反序列化。它將序列化對象,因爲基於用戶選擇填充哪些字段,任何繼承的類(甚至只是基類)都是合適的。
我有一個序列化沒有問題;問題在於反序列化。我怎麼可能有XmlSerializer
反序列化數據到正確的派生類,而事先不知道類?我目前創建一個XmlReader
來讀取XML文件的第一個節點並確定它的類,它似乎適用於我的目的,但它似乎是一個非常不雅的解決方案。
我貼在下面的示例代碼。有什麼建議麼?
BaseType objectOfConcern = new BaseType();
XmlSerializer xserializer;
XmlTextReader xtextreader = new XmlTextReader(DEFAULT_FILENAME);
do { xtextreader.Read(); } while (xtextreader.NodeType != XmlNodeType.Element);
string objectType = xtextreader.Name;
xtextreader.Close();
FileStream fstream = new FileStream(DEFAULT_FILENAME, FileMode.Open);
switch (objectType)
{
case "type1":
xserializer = new XmlSerializer(typeof(DerivedType));
objectOfConcern = (DerivedType)xserializer.Deserialize(fstream);
//Load fields specific to that derived type here
whatever = (objectOfConcern as DerivedType).NoOfstreamubordinates.ToString();
case "xxx_1":
//code here
case "xxx_2":
//code here
case "xxx_n":
//code here
//and so forth
case "BaseType":
xserializer = new XmlSerializer(typeof(BaseType));
AssignEventHandler(xserializer);
objectOfConcern = (BaseType)xserializer.Deserialize(fstream);
}
//Assign all deserialized values from base class common to all derived classes here
//Close the FileStream
fstream.Close();
非常酷,非常感謝! – 2015-05-26 19:21:32