一个可序列化的C#对象,如何转成一个XML格式的文件或字符串【转】
原文:http://blog.csdn.net/otong/article/details/7894059
序列化或反序列化成一个字符串:
方法一:
序列化:
- public static string XMLSerialize<T>(T entity)
- {
- StringBuilder buffer = new StringBuilder();
- XmlSerializer serializer = new XmlSerializer(typeof(T));
- using (TextWriter writer = new StringWriter(buffer))
- {
- serializer.Serialize(writer, entity);
- }
- return buffer.ToString();
- }
反序列化:
- public static T DeXMLSerialize<T>(string xmlString)
- {
- T cloneObject = default(T);
- StringBuilder buffer = new StringBuilder();
- buffer.Append(xmlString);
- XmlSerializer serializer = new XmlSerializer(typeof(T));
- using (TextReader reader = new StringReader(buffer.ToString()))
- {
- Object obj = serializer.Deserialize(reader);
- cloneObject = (T)obj;
- }
- return cloneObject;
- }
方法二:
- /// <summary>
- /// 对象序列化成 XML String
- /// </summary>
- public static string XmlSerialize<T>(T obj)
- {
- string xmlString = string.Empty;
- XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
- using (MemoryStream ms = new MemoryStream())
- {
- xmlSerializer.Serialize(ms, obj);
- xmlString = Encoding.UTF8.GetString(ms.ToArray());
- }
- return xmlString;
- }
- /// <summary>
- /// XML String 反序列化成对象
- /// </summary>
- public static T XmlDeserialize<T>(string xmlString)
- {
- T t = default(T);
- XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
- using (Stream xmlStream = new MemoryStream(Encoding.UTF8.GetBytes(xmlString)))
- {
- using (XmlReader xmlReader = XmlReader.Create(xmlStream))
- {
- Object obj = xmlSerializer.Deserialize(xmlReader);
- t = (T)obj;
- }
- }
- return t;
- }
如果要序列化到一个文件,则使用FileStream就可以了
如:
string strFile = @"c:/book.xml";
using (FileStream fs = new FileStream(strFile, FileMode.Create))
{
XmlSerializer formatter = new XmlSerializer(typeof(T));
formatter.Serialize(fs, entity);
}
附:其实还可以直接用SringWriter
StringBuilder sb = new StringBuilder();
System.IO.StringWriter writer = new System.IO.StringWriter(sb);
XmlSerializer formatter = new XmlSerializer(typeof(T));
formatter .Serialize(writer,entity );