using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.IO;
using
System.Data;
using
System.Xml;
using
System.Xml.Serialization;
/// <summary>
/// Xml序列化与反序列化
/// </summary>
public
class
XmlUtil
{
#region 反序列化
/// <summary>
/// 反序列化
/// </summary>
/// <param name="type">类型</param>
/// <param name="xml">XML字符串</param>
/// <returns></returns>
public
static
object
Deserialize(Type type,
string
xml)
{
try
{
using
(StringReader sr =
new
StringReader(xml))
{
XmlSerializer xmldes =
new
XmlSerializer(type);
return
xmldes.Deserialize(sr);
}
}
catch
(Exception e)
{
return
null
;
}
}
/// <summary>
/// 反序列化
/// </summary>
/// <param name="type"></param>
/// <param name="xml"></param>
/// <returns></returns>
public
static
object
Deserialize(Type type, Stream stream)
{
XmlSerializer xmldes =
new
XmlSerializer(type);
return
xmldes.Deserialize(stream);
}
#endregion
#region 序列化
/// <summary>
/// 序列化
/// </summary>
/// <param name="type">类型</param>
/// <param name="obj">对象</param>
/// <returns></returns>
public
static
string
Serializer(Type type,
object
obj)
{
MemoryStream Stream =
new
MemoryStream();
XmlSerializer xml =
new
XmlSerializer(type);
try
{
//序列化对象
xml.Serialize(Stream, obj);
}
catch
(InvalidOperationException)
{
throw
;
}
Stream.Position = 0;
StreamReader sr =
new
StreamReader(Stream);
string
str = sr.ReadToEnd();
sr.Dispose();
Stream.Dispose();
return
str;
}
#endregion
}
下面是测试代码:
1. 实体对象转换到Xml
1 2 3 4 5 6 7 8 9 | public class Student { public string Name { set ; get ; } public int Age { set ; get ; } } Student stu1 = new Student() { Name = "okbase" , Age = 10 }; string xml = XmlUtil.Serializer( typeof (Student), stu1); Console.Write(xml); |
2. Xml转换到实体对象
1 2 | Student stu2 = XmlUtil.Deserialize( typeof (Student), xml) as Student; Console.Write( string .Format( "名字:{0},年龄:{1}" , stu2.Name, stu2.Age)); |
3. DataTable转换到Xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // 生成DataTable对象用于测试 DataTable dt1 = new DataTable( "mytable" ); // 必须指明DataTable名称 dt1.Columns.Add( "Dosage" , typeof ( int )); dt1.Columns.Add( "Drug" , typeof ( string )); dt1.Columns.Add( "Patient" , typeof ( string )); dt1.Columns.Add( "Date" , typeof (DateTime)); // 添加行 dt1.Rows.Add(25, "Indocin" , "David" , DateTime.Now); dt1.Rows.Add(50, "Enebrel" , "Sam" , DateTime.Now); dt1.Rows.Add(10, "Hydralazine" , "Christoff" , DateTime.Now); dt1.Rows.Add(21, "Combivent" , "Janet" , DateTime.Now); dt1.Rows.Add(100, "Dilantin" , "Melanie" , DateTime.Now); // 序列化 xml = XmlUtil.Serializer( typeof (DataTable), dt1); Console.Write(xml); |
4. Xml转换到DataTable
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 反序列化 DataTable dt2 = XmlUtil.Deserialize( typeof (DataTable), xml) as DataTable; // 输出测试结果 foreach (DataRow dr in dt2.Rows) { foreach (DataColumn col in dt2.Columns) { Console.Write(dr[col].ToString() + " " ); } Console.Write( "\r\n" ); } |
5. List转换到Xml
1 2 3 4 5 6 7 8 | // 生成List对象用于测试 List<Student> list1 = new List<Student>(3); list1.Add( new Student() { Name = "okbase" , Age = 10 }); list1.Add( new Student() { Name = "csdn" , Age = 15 }); // 序列化 xml = XmlUtil.Serializer( typeof (List<Student>), list1); Console.Write(xml); |
6. Xml转换到List
1 2 3 4 5 | List<Student> list2 = XmlUtil.Deserialize( typeof (List<Student>), xml) as List<Student>; foreach (Student stu in list2) { Console.WriteLine(stu.Name + "," + stu.Age.ToString()); } |
转载:http://blog.okbase.net/haobao/archive/62.html
本文转自程序猿博客51CTO博客,原文链接http://blog.51cto.com/haihuiwei/1675868如需转载请自行联系原作者
365850153