创建一个采用类型参数的DataContractSerializer的通用子类是否有用?

时间:2013-03-12 20:36:00

标签: c# datacontractserializer

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

对于使用XmlSerializer,它看起来非常有用。我开始做一些测试但后来意识到我使用的是TimeSpan类型,而不是Serializable。所以我再次在线搜索,发现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

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

1 个答案:

答案 0 :(得分: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);
    }
}

总的来说,它允许您保存几行代码,并为您提供一致的界面,只要您正确编写它(并且不要只是复制粘贴它;))我认为&# 39;合理的事情。