在XmlSerializer中使用泛型 [英] Using generics with XmlSerializer
本文介绍了在XmlSerializer中使用泛型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
public MyObject LoadData()
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject));
using(TextReader reader = new StreamReader(settingsFileName))
{
return(MyObject)xmlSerializer.Deserialize(reader);
(以及类似的反序列码)。
它需要投射,并不是很好。有没有一种方法,直接在.NET Framework中使用序列化的泛型?也就是说写一些类似于:
public MyObject LoadData()
{
//泛型这里。
XmlSerializer< MyObject> xmlSerializer = new XmlSerializer();
使用(TextReader reader = new StreamReader(settingsFileName))
{
//不再强制转换。
return xmlSerializer.Deserialize(reader);
$ / code>
解决方案除了@Oded,您还可以制作方法Generic as well:
public T ConvertXml< T>(string xml)
{
var serializer = new XmlSerializer的(typeof运算(T));
return(T)serializer.Deserialize(new StringReader(xml));
}
通过这种方式,您不需要使整个类具有通用性,并且可以像这样使用它:
var result = ConvertXml< MyObject>(source);
When using XML serialization in C#, I use code like this:
public MyObject LoadData()
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject));
using (TextReader reader = new StreamReader(settingsFileName))
{
return (MyObject)xmlSerializer.Deserialize(reader);
}
}
(and similar code for deserialization).
It requires casting and is not really nice. Is there a way, directly in .NET Framework, to use generics with serialization? That is to say to write something like:
public MyObject LoadData()
{
// Generics here.
XmlSerializer<MyObject> xmlSerializer = new XmlSerializer();
using (TextReader reader = new StreamReader(settingsFileName))
{
// No casts nevermore.
return xmlSerializer.Deserialize(reader);
}
}
解决方案 An addition to @Oded, you can make the method Generic aswell:
public T ConvertXml<T>(string xml)
{
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(new StringReader(xml));
}
This way you don't need to make the whole class generic and you can use it like this:
var result = ConvertXml<MyObject>(source);
这篇关于在XmlSerializer中使用泛型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文