2015-11-30 90 views
1

我想傳遞一個類型對象傳遞給序列化程序。傳遞類作爲類型

internal void SerializeXML(Object ObjType, String XMLRoot, Object Output, String Filename) 
    { 
     XmlSerializer serializer = new XmlSerializer(typeof(ObjType), new XmlRootAttribute(XMLRoot)); 

     StreamReader reader = new StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(Filename)); 
     Output = (Type)serializer.Deserialize(reader); 
     reader.Close(); 
    } 

而且我想通過調用它(Main.LanguageList.Language是一個類):

SerializeXML(Main.LanguageList.Language, "Language", LanguageListFile, InternalLangListXML); 

我得到的對象是可變的,但作爲一個類型。

+0

而你的問題是? –

回答

2

它會更優雅寫通用方法:

internal void DeserializeXML<T>(String XMLRoot, T Output, String Filename) 
{ 
    XmlSerializer serializer = new XmlSerializer(typeof(T), new XmlRootAttribute(XMLRoot)); 

    StreamReader reader = new StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(Filename)); 
    Output = (T)serializer.Deserialize(reader); 
    reader.Close(); 
} 

,並調用它是這樣的:

DeserializeXML<Main.LanguageList.Language>("Language", LanguageListFile, InternalLangListXML); 

而且,它會建議改變方法返回結果而不是依靠輸出參數:

internal T DeserializeXML<T>(String XMLRoot, String Filename) 
{ 
    XmlSerializer serializer = new XmlSerializer(typeof(T), new XmlRootAttribute(XMLRoot)); 

    using (StreamReader reader = new StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(Filename))) 
    { 
     return (T)serializer.Deserialize(reader); 
    } 
} 

然後它可以是ca像這樣:

var result = DeserializeXML<Main.LanguageList.Language>("Language", InternalLangListXML); 
+1

刪除我的答案,贊成你的更好的答案。 (:-D) – GreatAndPowerfulOz

+0

體育精神!謝謝:) – PoweredByOrange

+0

謝謝,我認爲這將起作用! –

相關問題