using System;
using System.IO;
using System.Reflection;
using System.Xml;
using System.Xml.Serialization;
using static System.Net.WebRequestMethods;
namespace HMI.Core.Util
{
public static class XmlHelper
{
///
/// serialize object to xml file.
///
/// the path to save the xml file
/// the object you want to serialize
public static void SerializeToXml(string path, object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
string content = string.Empty;
//serialize
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
content = writer.ToString();
}
//save to file
using (StreamWriter stream_writer = new StreamWriter(path))
{
stream_writer.Write(content);
}
}
///
/// xml 文件反序列化为对象
///
/// 序列化类型
/// the path of the xml file
/// 对象
public static T DeserializeFromXml(string path)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (StreamReader reader = new StreamReader(path))
{
return (T)serializer.Deserialize(reader);
}
}
public static bool ReadFromXml(T obj, string path) {
XmlDocument xd = new XmlDocument();
xd.Load(path);
Type type = typeof(T);
XmlNode root = xd.SelectSingleNode(type.Name);
if (root == null) {
return false;
}
//获取 RefHero 中所有的实例私有字段
FieldInfo[] fieldArray = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
foreach (FieldInfo filed in fieldArray)
{
string fileName = filed.Name;
XmlNode node = root.SelectSingleNode(fileName);
if (node == null)
{
continue;
}
filed.SetValue(obj, node.InnerText);
}
return true;
}
}
}