创建一个DataContractSerializer的泛型子类(它接受一个类型参数)是否有用?

本文关键字:一个 类型参数 是否 有用 泛型 DataContractSerializer 创建 子类 | 更新日期: 2023-09-27 18:03:30

我过去使用过XmlSerializer类,发现创建序列化和反序列化方法的通用版本似乎很常见。我最近没有任何以前的代码,所以我搜索了一些,发现了这个页面:http://www.codeproject.com/Articles/233908/Xml-serialization-using-generics#section2。

对于使用XmlSerializer,它看起来非常有用。我开始做一些测试,但后来意识到,我使用的TimeSpan类型是不可序列化的。所以我再次在网上搜索,找到了DataContractSerializer类,它确实支持TimeSpan类型。所以实际的代码现在应该都可以正常工作了。

我开始考虑创建DataContractSerializer类的通用版本,就像使用XmlSerializer一样。在网上搜索后,我没能找到任何例子。目前,我认为有可能创建一个通用版本,但我想知道是否有任何意义。

任何人都可以有用的DataContractSerializer告诉我,如果他们遇到这个请?是不是在尝试使用标准类之前,我就已经过度设计了解决方案?

我的想法是创建一个通用的包装器,可以放入一个通用的实用工具/工具程序集,我将尝试并开始为未来的工作构建。

编辑:我还发现了这个示例:http://books.google.co.uk/books?id=PvNrurEhmiEC&pg=PA108&lpg=PA108&dq=datacontractserializer+generic+wrapper&source=bl&ots=ChCqGuHXIs&sig=-uMLuqd7B1bUj6uWZfTQcScLfe0&hl=en&sa=X&ei=ypw_UdjvGYesPdKqgPAG&ved=0CC4Q6AEwAA

虽然我发现它不能编译,因为它没有实现所需的方法

创建一个DataContractSerializer的泛型子类(它接受一个类型参数)是否有用?

我想你可以这么做。你也可以写一个非泛型版本;这里有两个函数可以做到这一点:

public static void Write<T>(T data)
{
    DataContractSerializer dcs = new DataContractSerializer(typeof(T));
    using (MemoryStream stream = new MemoryStream())
    {
        dcs.WriteObject(stream, data);
    }
}
public static void Write(object data)
{
    if (data == null)
        throw new ArgumentNullException();
    DataContractSerializer dcs = new DataContractSerializer(data.GetType());
    using (MemoryStream stream = new MemoryStream())
    {
        dcs.WriteObject(stream, data);
    }
}

总的来说,它允许您保存几行代码,并为您提供一致的接口,所以只要您正确地编写它(而不仅仅是复制粘贴这个;))我认为这是一件合理的事情。

相关文章: