Ars*_*nko 14 c# oop generics xml-serialization xmlserializer
在C#中使用XML序列化时,我使用如下代码:
public MyObject LoadData()
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject));
using (TextReader reader = new StreamReader(settingsFileName))
{
return (MyObject)xmlSerializer.Deserialize(reader);
}
}
Run Code Online (Sandbox Code Playgroud)
(以及类似的反序列化代码).
它需要铸造而且不是很好.有没有办法,直接在.NET Framework中使用泛型与序列化?也就是说写下这样的东西:
public MyObject LoadData()
{
// Generics here.
XmlSerializer<MyObject> xmlSerializer = new XmlSerializer();
using (TextReader reader = new StreamReader(settingsFileName))
{
// No casts nevermore.
return xmlSerializer.Deserialize(reader);
}
}
Run Code Online (Sandbox Code Playgroud)
Fil*_*erg 24
作为@Oded的补充,您可以使用Generic方法:
public T ConvertXml<T>(string xml)
{
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(new StringReader(xml));
}
Run Code Online (Sandbox Code Playgroud)
这样你就不需要使整个类变得通用,你可以像这样使用它:
var result = ConvertXml<MyObject>(source);
Run Code Online (Sandbox Code Playgroud)
Ode*_*ded 12
使序列化类/方法通用:
public T LoadData<T>()
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
using (TextReader reader = new StreamReader(settingsFileName))
{
return (T)xmlSerializer.Deserialize(reader);
}
}
Run Code Online (Sandbox Code Playgroud)