2015-10-16 71 views
-4

我需要使該類儘可能通用......我想傳遞一個XML字符串Path並返回傳遞給getDataFromFile()方法的對象類型的數據。 這是我迄今爲止所取得:通用方法中的Casting類型

public class XmlFile 
{ 
    public string mXmlFilePath { get; set; } 

    public XmlFile(string xmlFilePath) 
    { 
     this.mXmlFilePath = xmlFilePath; 
    } 

    public object getDataFromFile(object dataObject) 
    { 
     LogFile.addLogEntry("Getting data from XML file."); 

     object data = null; 
     Type type = dataObject.GetType(); 

     try 
     { 

      StreamReader xmlStream = new StreamReader(this.mXmlFilePath); 
      XmlSerializer xmlfile = new XmlSerializer(type); 
      data = (type)xmlfile.Deserialize(xmlStream); 
      xmlStream.Close(); 
      return data; 
     } 
     catch (Exception ex) 
     { 
      LogFile.addLogEntry("Error reading data from XML file: " + ex.Message); 
      return null; 
     }   
    } 
} 

我知道我應該使用反射,但我無法使這個投data = (type)xmlfile.Deserialize(xmlStream);

謝謝...

+1

這並沒有讓所有的感覺?如果您投與否,該方法仍會返回一個「對象」。而且該方法不是通用的。你想要存檔什麼? –

+2

你應該使用泛型https://msdn.microsoft.com/en-us/library/twcad0zb.aspx – fantastik78

回答

0

你可以這樣做這種方式:

public T getDataFromFile<T>() 
{ 
    LogFile.addLogEntry("Getting data from XML file."); 
    try 
    { 
     using(StreamReader xmlStream = new StreamReader(this.mXmlFilePath)) 
     { 
      XmlSerializer xmlfile = new XmlSerializer(typeof(T)); 
      return (T)xmlfile.Deserialize(xmlStream); 
     } 
    } 
    catch (Exception ex) 
    { 
     LogFile.addLogEntry("Error reading data from XML file: " + ex.Message); 
     return null; 
    } 
} 
+0

非常感謝你Mario.This是exacly我所需要的。 Obrigado! – Nuno