2015-10-16 92 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