近工作涉及到将Object转化为XML的数据格式。再网上找了一些资料。现在在这里总结一下目前使用到的方法
主要转换代码如下:
代码如下 | 复制代码 |
public static Stream TransforToXMLFormat(object obj) { XmlSerializerFactory xmlSerializerFactory = new XmlSerializerFactory(); XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType()); MemoryStream stream = new MemoryStream(); xmlSerializer.Serialize(stream, obj); return stream; |
十分简单地使用了.Net的反射机制。生成出来的XML效果可以接受。重点要注意的几点:
1. 类必须要有Name这个属性否则转化会报错!
2. 使用[XmlAttribute]放于Name上面,即:
代码如下 | 复制代码 |
[XmlAttribute] public string Name; |
可以将Name变成XML的属性而不是XML的元素,即:
代码如下 | 复制代码 |
<Class xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="......"> |
而不是:
代码如下 | 复制代码 |
<Class xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Name></Name> </Class>
|
3. 想要将属性输出为XML的元素,属性必须是public的。
4. 输出是使用了List<>,若想改变List里面每个元素的类名需要在List<>上面加上[XmlElement(ElementName="想要改变的名字")]即:
代码如下 | 复制代码 |
[XmlElement(ElementName="想要改变的名字")] public List<Type> Objects = null; |
附加将Hashtable里面的值转化成List的操作
代码如下 | 复制代码 |
List<Object>= HashtableObject.Values.Cast<Object>().ToList(); |
DataTable转成XML文件
数据库表position有三个字段:
字段名 字段类型
position_id int
position_name varchar
position_desc varchar
下面是Datatable转XML的生成源码:
代码如下 | 复制代码 |
protected void Page_Load(object sender, EventArgs e) { //通过数据访问层把position读取到Datatable BizRules.PersonnelDAL pl = new PersonnelDAL(); DataTable dt = pl.Getposition(); StringBuilder str = new StringBuilder(); str.Append(DataTableToXml(dt)); this.CreateXml(str.ToString(), "test.xml"); Response.Write("生成test.xml成功"); } /// <summary> /// 生成文件 /// </summary> /// <param name="val"></param> /// <param name="filename"></param> public void CreateXml(string val, string filename) { UnicodeEncoding ucode = new UnicodeEncoding(); StreamWriter sw = new StreamWriter(Server.MapPath(filename)); sw.WriteLine("<?xml version="1.0" encoding="utf-8"?>"); sw.WriteLine(val); sw.Close(); sw.Dispose(); } /// <summary> /// 转换成XML格式字符串 /// </summary> /// <param name="dt"></param> /// <returns></returns> public string DataTableToXml(DataTable dt) { StringBuilder strXml = new StringBuilder(); strXml.AppendLine("<XmlTable>"); for (int i = 0; i < dt.Rows.Count; i ) { strXml.AppendLine(" <rows>"); for (int j = 0; j < dt.Columns.Count; j ) { strXml.AppendLine(" <" dt.Columns[j].ColumnName ">" dt.Rows[i][j] "</" dt.Columns[j].ColumnName ">"); } strXml.AppendLine(" </rows>"); } strXml.AppendLine("</XmlTable>"); return strXml.ToString(); } |
下面看下生成XML文件的效果:
代码如下 | 复制代码 |
<?xml version="1.0" encoding="utf-8"?> <XmlTable> <rows> <position_id>29</position_id> <position_name>业务员</position_name> <position_desc></position_desc> </rows> <rows> <position_id>30</position_id> <position_name>业务经理</position_name> <position_desc></position_desc> </rows> <rows> <position_id>31</position_id> <position_name>业务总监</position_name> <position_desc></position_desc> </rows> </XmlTable> |
如果你使用DataSet,可以把DataSet转成Datatable,再使用上面的方法就可以了。
数据转换xml文件
从数据库的查询结果的数据保存到XML文件
代码如下 | 复制代码 |
<%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.OleDb" %> <script language="VB" runat="server"> Sub Page_Load(Sender As Object, E As EventArgs) Dim strConnection As String strConnection = "Provider=Microsoft.Jet.OLEDB.4.0; " & _ objConnection = New OledbConnection(strConnection) objAdapter.Fill(objDataSet, "Employees") objDataSet.WriteXml(Server.MapPath("Employee2.xml")) End Sub </script> |
更多详细内容请查看:http://www.111cn.net/net/37/38865.htm