我刚刚写了这个 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框架中遗漏了什么?这不是火箭科学!
答案 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。只要您从原始二进制形式(XDocument
,XmlDocument
,XPathDocument
或任何其他类型的DOM)中获取XML数据,就会遇到编码问题。如果开发人员将对象序列化为具有编码X的字符串,然后将该字符串写入具有编码Y的磁盘文件,该怎么办?不太安全。除此之外,如果编码X不是UTF-16,你甚至如何用.NET字符串表示数据?
答案 1 :(得分:0)
如果您在项目中进行任何实际数量(> 1)的序列化/反序列化,这将非常有用。对我来说就是这种情况,所以我只是在Utils库中添加了一个类似的类,以及其他可重用的函数。