我真的需要写这个“SerializationHelper”吗?

时间:2010-01-12 16:17:35

标签: c# .net-3.5 serialization

我刚刚写了这个 SerializationHelper 类,但我不敢相信这是必要的!

using System.IO;
using System.Xml.Serialization;

public static class SerializationHelper
{
    public static string Serialize<T>(T obj)
    {
        var outStream = new StringWriter();
        var ser = new XmlSerializer(typeof(T));
        ser.Serialize(outStream, obj);
        return outStream.ToString();
    }

    public static T Deserialize<T>(string serialized)
    {
        var inStream = new StringReader(serialized);
        var ser = new XmlSerializer(typeof(T));
        return (T)ser.Deserialize(inStream);
    }
}

它的使用方式如下:

var serialized = SerializationHelper.Serialize(myObj);

var myObj = SerializationHelper.Deserialize<MyType>(serialized)

我在.NET框架中遗漏了什么?这不是火箭科学!

2 个答案:

答案 0 :(得分:1)

实际上,您调用.NET API的位是:

var ser = new XmlSerializer(typeof(T));
ser.Serialize(outStream, obj);

var ser = new XmlSerializer(typeof(T));
var obj = (T) ser.Deserialize(inStream);

其余代码是您的个人专长。我不认为两行代码对于调用API来说太多了。你总是可以压缩它们,例如

(new XmlSerializer(typeof(T))).Serialize(outStream, obj);

var obj = (T) (new XmlSerializer(typeof(T))).Deserialize(inStream);

纯粹地说,我应该指出,我认为将字符串变量中的XML数据存储为Code Smell。只要您从原始二进制形式(XDocumentXmlDocumentXPathDocument或任何其他类型的DOM)中获取XML数据,就会遇到编码问题。如果开发人员将对象序列化为具有编码X的字符串,然后将该字符串写入具有编码Y的磁盘文件,该怎么办?不太安全。除此之外,如果编码X不是UTF-16,你甚至如何用.NET字符串表示数据?

答案 1 :(得分:0)

如果您在项目中进行任何实际数量(> 1)的序列化/反序列化,这将非常有用。对我来说就是这种情况,所以我只是在Utils库中添加了一个类似的类,以及其他可重用的函数。