2013-04-12 139 views
3

我有這樣一段代碼:仿製藥可以用來返回實際的對象?

private object DeserialiseFromXMLFile(string fileLocation, Type type) 
{ 
    XmlSerializer serializer = new 
     XmlSerializer(type); 

    FileStream fs = new FileStream(fileLocation, FileMode.Open); 
    XmlReader reader = new XmlTextReader(fs); 
    return serializer.Deserialize(reader); 
} 

我想知道如果我使用泛型,因爲我想返回類型爲T

有誰知道這是可能的,或者是這個最優雅的方案?

在此先感謝

回答

6
private T DeserialiseFromXMLFile<T>(string fileLocation) 
{ 
    XmlSerializer serializer = new 
     XmlSerializer(typeof(T)); 

    FileStream fs = new FileStream(fileLocation, FileMode.Open); 
    XmlReader reader = new XmlTextReader(fs); 
    return (T)serializer.Deserialize(reader); 
} 

然後,您可以調用它的方式:

User item = DeserialiseFromXMLFile<User>("myFile.xml"); 
1

你可以這樣做:

private T DeserialiseFromXMLFile<T>(string fileLocation) 
{ 
    XmlSerializer serializer = new 
     XmlSerializer(typeof(T)); 

    FileStream fs = new FileStream(fileLocation, FileMode.Open); 
    XmlReader reader = new XmlTextReader(fs); 
    return (T)serializer.Deserialize(reader); 
} 

typeof(T)回報Type實例類型T和最後你明確地轉換了由seria返回的對象lizer到T

1
private static T DeserialiseFromXMLFile<T>(string fileLocation)  { 
     XmlSerializer serializer = new XmlSerializer(typeof(T)); 

     FileStream fs = new FileStream(fileLocation, FileMode.Open); 
     XmlReader reader = new XmlTextReader(fs); 

     return (T)serializer.Deserialize(reader); 
    } 
1

是這樣的,你在找什麼?

private T DeserialiseFromXMLFile<T>(string fileLocation) 
{ 
    XmlSerializer serializer = new 
     XmlSerializer(typeof(T)); 

    FileStream fs = new FileStream(fileLocation, FileMode.Open); 
    XmlReader reader = new XmlTextReader(fs); 
    return (T) serializer.Deserialize(reader); 
} 

用途則是:

var foo = DeserialiseFromXMLFile<Foo>("Foo.xml"); 

如果你不喜歡有明確指定Foo,可以將方法更改爲

private void DeserialiseFromXMLFile<T>(string fileLocation, out T t) 
{ 
    ... 
    t = (T) serializer.Deserialize(reader); 
} 

,你會叫的

Foo foo; 
DeserialiseFromXMLFile("Foo.xml", out foo); 

你的代碼,也可以使用using

private T DeserialiseFromXMLFile<T>(string fileLocation) 
{ 
    var serializer = new XmlSerializer(typeof(T)); 

    using (var fs = new FileStream(fileLocation, FileMode.Open)) 
    { 
     var reader = new XmlTextReader(fs); 
     return (T) serializer.Deserialize(reader); 
    } 
}