public class xmlutil { /// <summary> /// xml & datacontract serialize & deserialize helper /// </summary> /// <typeparam name="t"></typeparam> /// <param name="serialobject"></param> /// <returns></returns> public static string serializer<t>(t serialobject) where t : class { string result = string.empty; using (memorystream mem = new memorystream()) { using (xmltextwriter writer = new xmltextwriter(mem, encoding.utf8)) { system.xml.serialization.xmlserializer ser = new system.xml.serialization.xmlserializer(typeof(t)); ser.serialize(writer, serialobject); result = encoding.utf8.getstring(mem.toarray()); } } return result; } public static t deserialize<t>(string str) where t : class { t result = null; using (memorystream memorystream = new memorystream(encoding.utf8.getbytes(str))) { using (streamreader streamreader = new streamreader(memorystream)) { system.xml.serialization.xmlserializer xmlserializer = new system.xml.serialization.xmlserializer(typeof(t)); result = (t)xmlserializer.deserialize(memorystream); } } return result; } }
上面的写法持续序列化不会有内存溢出的性能问题,之前一直被告知直接引用公司某位老鸟封装好的dll来序列化,后来发现了老是出现内存溢出,贴一下它的错误写法,仅供吸取教训:
public class xmlutil { /// <summary> /// xml & datacontract serialize & deserialize helper /// </summary> /// <typeparam name="t"></typeparam> /// <param name="serialobject"></param> /// <returns></returns> public static string serializer<t>(t serialobject) where t : class { //try //{ xmlserializer ser = new xmlserializer(typeof(t)); system.io.memorystream mem = new memorystream(); xmltextwriter writer = new xmltextwriter(mem, encoding.utf8); ser.serialize(writer, serialobject); writer.close(); return encoding.utf8.getstring(mem.toarray()); //} //catch (exception ex) //{ // return null; //} } public static t deserialize<t>(string str) where t : class { //try //{ xmlserializer myserializer = new xmlserializer(typeof(t)); streamreader mem2 = new streamreader( new memorystream(system.text.encoding.utf8.getbytes(str)), system.text.encoding.utf8); return (t)myserializer.deserialize(mem2); //} //catch (exception) //{ // return null; //} } //public static string json_serializeobject(object value) //{ // return newtonsoft.json.jsonconvert.serializeobject(value); //} //public static object json_deserializeobject(string value) //{ // return newtonsoft.json.jsonconvert.deserializeobject(value); //} //public static t json_deserializeobject<t>(string value) //{ // return newtonsoft.json.jsonconvert.deserializeobject<t>(value); //} }
以上就是c#中序列化的使用总结的详细内容。
