接口:
interface ISerialize
{
/// <summary>
/// xml 转换为 model
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="xml"></param>
/// <param name="model"></param>
/// <returns></returns>
T XmlToModel<T>(string xml, T model);
/// <summary>
/// model 转换为xml
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="model"></param>
/// <returns></returns>
string ModelToXml<T>(T model);
/// <summary>
/// xml 转换为Table
/// </summary>
/// <param name="xml"></param>
/// <returns></returns>
DataTable XmlToTable(string xml);
/// <summary>
/// 获取对应XML节点的值
/// </summary>
/// <param name="?"></param>
/// <returns></returns>
string XmlAnalysis(string stringRoot,string xml);
}
实现:
public class Serialize:ISerialize
{
public T XmlToModel<T>(string xml, T model)
{
StringReader xmlReader = new StringReader(xml);
XmlSerializer xmlSer = new XmlSerializer(typeof(T));
return (T)xmlSer.Deserialize(xmlReader);
}
public string ModelToXml<T>(T model)
{
MemoryStream stream = new MemoryStream();
XmlSerializer xmlSer = new XmlSerializer(typeof(T));
xmlSer.Serialize(stream, model);
stream.Position = 0;
StreamReader sr = new StreamReader(stream);
return sr.ReadToEnd();
}
public System.Data.DataTable XmlToTable(string xml)
{
StringReader xmlReader = new StringReader(xml);
DataSet ds = new DataSet();
ds.ReadXml(xmlReader);
return ds.Tables[0];
}
public string XmlAnalysis(string stringRoot,string xml)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
return doc.DocumentElement.SelectSingleNode(stringRoot).InnerXml.Trim();
}
}
Model:
public class Depart
{
public string DepartID { get; set; }
}
Test:
ISerialize s = new Serialize();
//XmlToDataTable
string xml = @"<Depart>
<DepartID>123</DepartID>
<PerSons>
<PerSon>
<name>张三</name>
<age>3</age>
</PerSon>
<PerSon>
<name>李斯</name>
<age>56</age>
</PerSon>
</PerSons>
</Depart>";
System.Data.DataTable ds=s.XmlToTable(xml);
string Value=ds.Rows[0][0].ToString();
//XmlToModel
string xml2 = @"<Depart>
<DepartID>123</DepartID>
</Depart>";
Depart dp=new Depart();
object obj = s.XmlToModel(xml2, dp);
//ModelToXml
Depart dp2 = new Depart() { DepartID="111"};
string xmlStr = s.ModelToXml(dp2);
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlStr);
//第一个匹配节点的值
string xmlNode = s.XmlAnalysis("DepartID", xmlStr);