#region XML序列化文件和反序列化

        /// <summary>
/// 通用类的保存函数,可以将已经声明过可序列化的类以文件方式保存起来。
/// 保存格式分为 XML明文式和 二进制。
/// 如果目标目录不存在,就自动创建目录。
/// </summary>
/// <typeparam name="T">要保存的类的类型</typeparam>
/// <param name="tclass">要保存的类</param>
/// <param name="sFilePath">要保存的文件完整路径,包括文件名。</param>
/// <param name="bXmlOrBin">true=XML,false=Bin</param>
/// <exception cref="System.Exception"></exception>
public void Save<T>(T tclass, string sFilePath, bool bXmlOrBin)
{
//目录检查
string sFolder = sFilePath.Substring(, sFilePath.LastIndexOf("\\"));
if (!Directory.Exists(sFolder)) Directory.CreateDirectory(sFolder); using (FileStream fs = new FileStream(sFilePath, FileMode.Create, FileAccess.Write))
{
if (bXmlOrBin)
{
using (MemoryStream stream = Serialize<T>(tclass, bXmlOrBin))
{
stream.WriteTo(fs);
stream.Close();
}
}
else
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = null;
bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
bf.Serialize(fs, bXmlOrBin);
}
fs.Close();
}
} /// <summary>
/// 从文件加载保存的信息,然后反序列化并返回保存的信息。
/// 如果要读取的文件不存在会引发异常。
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="tclass">要返回的类,失败返回默认</param>
/// <param name="sFilePath">文件路径</param>
/// <param name="bXmlOrBin">true=XML,false=Bin</param>
/// <exception cref="System.Exception"></exception>
/// <exception cref="System.IO.IOException">文件不存在</exception>
public void Load<T>(out T tclass, string sFilePath, bool bXmlOrBin)
{
if (!File.Exists(sFilePath))
{
tclass = default(T);
return;
//throw new IOException("要访问的文件不存在。");
}
using (FileStream fs = new FileStream(sFilePath, FileMode.Open, FileAccess.Read))
{
tclass = Deserialize<T>(fs, bXmlOrBin);
fs.Close();
}
} /// <summary>
/// 将传入的某个模型序列化,并返回其数据量,用于保存到文件里面。
/// 提供序列化到XML或二进制。
/// </summary>
/// <typeparam name="T">类的类型</typeparam>
/// <param name="model">要序列化的模型</param>
/// <param name="bXmlOrBin">true=xml序列化,false=二进制序列化</param>
/// <returns></returns>
/// <exception cref="System.Exception"></exception>
public MemoryStream Serialize<T>(T model, bool bXmlOrBin = true)
{
MemoryStream stream = new MemoryStream();
if (bXmlOrBin)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
serializer.Serialize(stream, model);
}
else
{
var bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
bf.Serialize(stream, model);
}
stream.Position = ;
return stream;
} /// <summary>
/// 将传入的数据量进行反序列化。
/// </summary>
/// <typeparam name="T">类的类型</typeparam>
/// <param name="stream">要反序列化的流</param>
/// <param name="bXmlOrBin">true=xml序列化,false=二进制序列化</param>
/// <returns></returns>
public T Deserialize<T>(Stream stream, bool bXmlOrBin = true)
{
T model = default(T);
using (var newstream = stream)
{
if (bXmlOrBin)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
//暂时没做什么处理,以后有日志文件,就直接添加进入
serializer.UnknownNode += new XmlNodeEventHandler(serializer_UnknownNode);
serializer.UnknownAttribute += new XmlAttributeEventHandler(serializer_UnknownAttribute);
model = (T)serializer.Deserialize(newstream);
}
else
{
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = null;
bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
model = (T)bf.Deserialize(newstream);
}
}
return model;
} #region 反序列化中出错的问题
private void serializer_UnknownNode(object sender, XmlNodeEventArgs e)
{
string aaaa = "Unknown Node:" + e.Name + "\t" + e.Text;
string bb = string.Empty;
//Console.WriteLine("Unknown Node:" + e.Name + "\t" + e.Text);
} private void serializer_UnknownAttribute(object sender, XmlAttributeEventArgs e)
{
//System.Xml.XmlAttribute attr = e.Attr;
//Console.WriteLine("Unknown attribute " +
//attr.Name + "='" + attr.Value + "'");
System.Xml.XmlAttribute attr = e.Attr;
string aaaa = "Unknown attribute " + attr.Name + "='" + attr.Value + "'";
string bb = string.Empty;
}
#endregion #endregion

XML解析序列化2

/// <summary>
/// 实体转Xml,Xml转实体类
/// </summary>
/// <typeparam name="T"></typeparam>
public class XmlHelper<T> where T : new()
{
#region 实体类转成Xml
/// <summary>
/// 对象实例转成xml
/// </summary>
/// <param name="item">对象实例</param>
/// <returns></returns>
public static string EntityToXml(T item)
{
IList<T> items = new List<T>();
items.Add(item);
return EntityToXml(items);
} /// <summary>
/// 对象实例集转成xml
/// </summary>
/// <param name="items">对象实例集</param>
/// <returns></returns>
public static string EntityToXml(IList<T> items)
{
//创建XmlDocument文档
XmlDocument doc = new XmlDocument();
//创建根元素
XmlElement root = doc.CreateElement("s");//typeof(T).Name +
//添加根元素的子元素集
foreach (T item in items)
{
EntityToXml(doc, root, item);
}
//向XmlDocument文档添加根元素
doc.AppendChild(root); return doc.InnerXml;
} private static void EntityToXml(XmlDocument doc, XmlElement root, T item)
{
//创建元素
XmlElement xmlItem = doc.CreateElement("t");//typeof(T).Name
//对象的属性集 System.Reflection.PropertyInfo[] propertyInfo =
typeof(T).GetProperties(System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Instance); foreach (System.Reflection.PropertyInfo pinfo in propertyInfo)
{
if (pinfo != null)
{
//对象属性名称
string name = pinfo.Name;
//对象属性值
string value = String.Empty; if (pinfo.GetValue(item, null) != null)
value = pinfo.GetValue(item, null).ToString();//获取对象属性值
//设置元素的属性值
xmlItem.SetAttribute(name, value);
}
}
//向根添加子元素
root.AppendChild(xmlItem);
} #endregion #region Xml转成实体类 /// <summary>
/// Xml转成对象实例
/// </summary>
/// <param name="xml">xml</param>
/// <returns></returns>
public static T XmlToEntity(string xml)
{
IList<T> items = XmlToEntityList(xml);
if (items != null && items.Count > )
return items[];
else return default(T);
} /// <summary>
/// Xml转成对象实例集
/// </summary>
/// <param name="xml">xml</param>
/// <returns></returns>
public static IList<T> XmlToEntityList(string xml)
{
XmlDocument doc = new XmlDocument();
try
{
doc.Load(xml);//LoadXML
}
catch (Exception ex)
{
throw ex;
}
if (doc.ChildNodes.Count <= )
return null;
//if (doc.ChildNodes[0].Name.ToLower() != typeof(T).Name.ToLower() + "s")
// return null; XmlNode node = doc.ChildNodes[]; IList<T> items = new List<T>(); foreach (XmlNode child in node.ChildNodes)
{
if (child.Name.ToLower() == typeof(T).Name.ToLower())
items.Add(XmlNodeToEntity(child));
} return items;
} private static T XmlNodeToEntity(XmlNode node)
{
T item = new T(); if (node.NodeType == XmlNodeType.Element)
{
//XmlElement element = (XmlElement)node; System.Reflection.PropertyInfo[] propertyInfo =
typeof(T).GetProperties(System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Instance); foreach (XmlNode attr in node.ChildNodes)//XmlAttribute
{
string attrName = attr.Name.ToLower();
string attrValue = attr.InnerXml.ToString();
foreach (System.Reflection.PropertyInfo pinfo in propertyInfo)
{
if (pinfo != null)
{
string name = pinfo.Name.ToLower();
Type dbType = pinfo.PropertyType;
if (name == attrName)
{
if (String.IsNullOrEmpty(attrValue))
continue;
switch (dbType.ToString())
{
case "System.Int32":
pinfo.SetValue(item, Convert.ToInt32(attrValue), null);
break;
case "System.Boolean":
pinfo.SetValue(item, Convert.ToBoolean(attrValue), null);
break;
case "System.DateTime":
pinfo.SetValue(item, Convert.ToDateTime(attrValue), null);
break;
case "System.Decimal":
pinfo.SetValue(item, Convert.ToDecimal(attrValue), null);
break;
case "System.Double":
pinfo.SetValue(item, Convert.ToDouble(attrValue), null);
break;
default:
pinfo.SetValue(item, attrValue, null);
break;
}
continue;
}
}
}
}
}
return item;
} #endregion
} //IList<ds> listDS = new List<MainWeb.ds>();
//listDS = XmlHelper<ds>.XmlToEntityList("D:\\DownLoad\\数据\\2017-03.xml");
/// <summary>
/// 根据节点读取xml指定节点内容
/// </summary>
/// <param name="spath">路径</param>
/// <param name="nodeName">节点名字</param>
/// <returns></returns>
public static string getXMLNodeText(string spath, string nodeName)
{
try
{
string uri = System.Web.HttpContext.Current.Server.MapPath("~/" + spath);
XmlDocument doc = new XmlDocument();
doc.Load(uri);
XmlElement eml = doc.SelectSingleNode("/" + nodeName) as XmlElement;
string result = eml.InnerText;
return result;
}
catch
{
return "";
}
} string strNode = getXMLNodeText("Web层文件路径", "documentXML/ParentNode/ChildNode");

根据IP获取城市--有道接口

 string Uri = "http://www.yodao.com/smartresult-xml/search.s?type=ip&q=" + IP;

            //获取省份名称
string CtryDisc = MyRegex.HttpWeb.getHtmlByUri(Uri, Encoding.GetEncoding("GB2312"));
using (XmlReader read = XmlReader.Create(CtryDisc))//获取返回的xml格式文件内容
{
while (read.Read())
{
switch (read.NodeType)
{
case XmlNodeType.Text://取xml格式文件当中的文本内容
if (string.Format("{0}", read.Value).ToString().Trim() != IP)//youdao返回的xml格式文件内容一个是IP,另一个是IP地址
{
CtryDisc = string.Format("{0}", read.Value).ToString().Trim();//赋值
}
break;
//other
}
}
}

config.xml

#region XML控制
public XmlDocument xml = null;
public string xmlpath = string.Empty;
/// <summary>
/// 以XML格式进行存储
/// </summary>
public bool Save(string id, string data, string nodes, string key, string value, bool isMsg)
{
if (!IsXml(isMsg)) return false;
foreach (XmlNode xl in xml.SelectNodes(nodes))
{
if (xl.Attributes[key].Value == id)
{
xl.Attributes[value].Value = data;
break;
}
}
xml.Save(xmlpath);
return true;
} /// <summary>
/// 获取数据
/// </summary>
public string GetData(string id, string nodes, string key, string value, bool isMsg)
{
if (!IsXml(isMsg)) return "";
foreach (XmlNode xl in xml.SelectNodes(nodes))
{
if (xl.Attributes[key].Value == id)
return xl.Attributes[value].Value;
}
return "";
} /// <summary>
/// 判断XML文件是否存在
/// </summary>
/// <returns></returns>
public bool IsXml(bool isMsg)
{
FileInfo file = new FileInfo(xmlpath);
if (!file.Exists)
{
if (isMsg)
MessageBox.Show(string.Format("无法找到数据配置文件:{0}\n请联系管理员!", file.Name));
return false;
}
file.IsReadOnly = false;
xml = new XmlDocument();
xml.Load(xmlpath);
return true;
}
#endregion xmlpath = string.Format(@"{0}config.xml", AppDomain.CurrentDomain.BaseDirectory);
if (!File.Exists(xmlpath))
{
MessageBox.Show("找不到config.xml配置文件请联系管理员!");
return;
} /*
string _appStrPath = "/configuration/appSettings/add";
string _depart = GetData("depart", _appStrPath, "key", "value", false);
*/

/// <summary>    /// 实体转Xml,Xml转实体类    /// </summary>    /// <typeparam name="T"></typeparam>    public class XmlHelper<T> where T : new()    {        #region 实体类转成Xml        /// <summary>        /// 对象实例转成xml        /// </summary>        /// <param name="item">对象实例</param>        /// <returns></returns>        public static string EntityToXml(T item)        {            IList<T> items = new List<T>();            items.Add(item);            return EntityToXml(items);        }
        /// <summary>        /// 对象实例集转成xml        /// </summary>        /// <param name="items">对象实例集</param>        /// <returns></returns>        public static string EntityToXml(IList<T> items)        {            //创建XmlDocument文档            XmlDocument doc = new XmlDocument();            //创建根元素            XmlElement root = doc.CreateElement("s");//typeof(T).Name +             //添加根元素的子元素集            foreach (T item in items)            {                EntityToXml(doc, root, item);            }            //向XmlDocument文档添加根元素            doc.AppendChild(root);
            return doc.InnerXml;        }
        private static void EntityToXml(XmlDocument doc, XmlElement root, T item)        {            //创建元素            XmlElement xmlItem = doc.CreateElement("t");//typeof(T).Name            //对象的属性集
            System.Reflection.PropertyInfo[] propertyInfo =            typeof(T).GetProperties(System.Reflection.BindingFlags.Public |            System.Reflection.BindingFlags.Instance);

foreach (System.Reflection.PropertyInfo pinfo in propertyInfo)            {                if (pinfo != null)                {                    //对象属性名称                    string name = pinfo.Name;                    //对象属性值                    string value = String.Empty;
                    if (pinfo.GetValue(item, null) != null)                        value = pinfo.GetValue(item, null).ToString();//获取对象属性值                    //设置元素的属性值                    xmlItem.SetAttribute(name, value);                }            }            //向根添加子元素            root.AppendChild(xmlItem);        }

#endregion
        #region Xml转成实体类
        /// <summary>        /// Xml转成对象实例        /// </summary>        /// <param name="xml">xml</param>        /// <returns></returns>        public static T XmlToEntity(string xml)        {            IList<T> items = XmlToEntityList(xml);            if (items != null && items.Count > 0)                return items[0];            else return default(T);        }
        /// <summary>        /// Xml转成对象实例集        /// </summary>        /// <param name="xml">xml</param>        /// <returns></returns>        public static IList<T> XmlToEntityList(string xml)        {            XmlDocument doc = new XmlDocument();            try            {                doc.Load(xml);//LoadXML            }            catch (Exception ex)            {                throw ex;            }            if (doc.ChildNodes.Count <= 1)                return null;            //if (doc.ChildNodes[0].Name.ToLower() != typeof(T).Name.ToLower() + "s")            //    return null;
            XmlNode node = doc.ChildNodes[1];
            IList<T> items = new List<T>();
            foreach (XmlNode child in node.ChildNodes)            {                if (child.Name.ToLower() == typeof(T).Name.ToLower())                    items.Add(XmlNodeToEntity(child));            }
            return items;        }
        private static T XmlNodeToEntity(XmlNode node)        {            T item = new T();
            if (node.NodeType == XmlNodeType.Element)            {                //XmlElement element = (XmlElement)node;
                System.Reflection.PropertyInfo[] propertyInfo =            typeof(T).GetProperties(System.Reflection.BindingFlags.Public |            System.Reflection.BindingFlags.Instance);
                foreach (XmlNode attr in node.ChildNodes)//XmlAttribute                {                    string attrName = attr.Name.ToLower();                    string attrValue = attr.InnerXml.ToString();                    foreach (System.Reflection.PropertyInfo pinfo in propertyInfo)                    {                        if (pinfo != null)                        {                            string name = pinfo.Name.ToLower();                            Type dbType = pinfo.PropertyType;                            if (name == attrName)                            {                                if (String.IsNullOrEmpty(attrValue))                                    continue;                                switch (dbType.ToString())                                {                                    case "System.Int32":                                        pinfo.SetValue(item, Convert.ToInt32(attrValue), null);                                        break;                                    case "System.Boolean":                                        pinfo.SetValue(item, Convert.ToBoolean(attrValue), null);                                        break;                                    case "System.DateTime":                                        pinfo.SetValue(item, Convert.ToDateTime(attrValue), null);                                        break;                                    case "System.Decimal":                                        pinfo.SetValue(item, Convert.ToDecimal(attrValue), null);                                        break;                                    case "System.Double":                                        pinfo.SetValue(item, Convert.ToDouble(attrValue), null);                                        break;                                    default:                                        pinfo.SetValue(item, attrValue, null);                                        break;                                }                                continue;                            }                        }                    }                }            }            return item;        }
        #endregion    }

最新文章

  1. yii2 model层中配置常量与list
  2. php lock_sh共享锁 与 lock_ex排他锁
  3. 单片机中用c编程时头文件reg51.h及reg52.h解析
  4. waterMarkTextBox
  5. sprint2 项目的粗略展示
  6. shell问题(转)
  7. C#文件和文件夹输入输出流代码
  8. node-mongo-native1.3.19连接mongo的最优方法
  9. foxmail创建163公司企业邮箱的时候会出现ERR Unable to log on
  10. 物联网传输协议MQTT
  11. debain 解决无法显示中文
  12. 把div 当文字来进行布局控制
  13. assert断言检测
  14. Hibernate更新数据(不用update也可以)
  15. .NetCore&amp;Linux&amp;Docker&amp;Portainer踩坑历险记
  16. Prometheus监控学习笔记之Prometheus从1.x升级到2.x
  17. OpenLayers学习笔记(六)— 拖拽叠加层overlayer
  18. CSS-背景-渐变-文本格式化
  19. [转帖] Windows 与linux的栈大小问题
  20. 017.Zabbix宏介绍

热门文章

  1. Linux下python升级至2.7
  2. MySQL时间函数,用起来比PHP还爽
  3. BZOJ3224 普通平衡树
  4. Django 部署 uwsgi + nginx + supervisor
  5. Java同步synchronized与死锁
  6. ecshop 影响全局的标量lib_main.php
  7. ajax成功跨域_自己写的
  8. 如何让Chrome浏览器可以加载本地XML文件?
  9. 轻量级router[类似laravel router]
  10. getAttribute和getParameter的区别