在XmlSerializer中使用泛型 [英] Using generics with XmlSerializer

查看:127
本文介绍了在XmlSerializer中使用泛型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在C#中使用XML序列化时,我使用如下代码:

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆