0

我过去使用过XmlSerializer类,发现创建 Serilize 和 Deserialize 方法的通用版本似乎很常见。我最近没有任何以前的代码,所以我搜索了一些并找到了这个页面: 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&eiPdAE=ypw_G&UdjvCC4YesPdAE=ypw_G&UdjvCCQ4

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

4

1 回答 1

0

好吧,我想你可以做到这一点。您实际上也可以编写非通用版本;这是执行此操作的两个函数:

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);
    }
}

总的来说,它可以让您节省几行代码,并为您提供一致的界面,所以只要您正确编写它(不要只是复制粘贴;))我认为这是一个合理的做法。

于 2013-03-12T21:13:17.070 回答