Xml反序列化
XmlHelper帮助类:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; using System.IO; using System.Xml.Serialization; using System.Reflection; namespace PushToolCompare { public class XmlHelper { /// <summary> /// 返回实体类List /// </summary> /// <param name="filePath">xml文件目录</param> /// <param name="nodeParentName">父结点名称</param> /// <param name="nodeName">结点名称</param> /// <param name="nodeAncestorsName">祖父结点名称</param> /// <returns></returns> public static List<T> ConverToModelList<T>(string filePath, string nodeParentName, string nodeName, string nodeAncestorsName = "") where T:new() { List<T> lists = new List<T>(); XElement xe = XElement.Load(@filePath); XElement ancestors = string.IsNullOrEmpty(nodeAncestorsName) ? xe.Element(nodeParentName) : xe.Element(nodeAncestorsName).Element(nodeParentName); IEnumerable<XElement> childrenItems = ancestors.Elements(nodeName); foreach (XElement node in childrenItems) { T SampleModel = new T(); foreach (XElement item in node.Elements()) { foreach (PropertyInfo property in SampleModel.GetType().GetProperties()) { if (item.Name == property.Name) { if (item.Value != "[Null]") { property.SetValue(SampleModel, Convert.ChangeType(item.Value, property.PropertyType), null); break; } else property.SetValue(SampleModel, null, null); } } } lists.Add(SampleModel); } return lists; } public static T Deserialize<T>(string filePath) { if (File.Exists(filePath)) { using (StreamReader sr=new StreamReader(filePath)) { return Deserialize<T>(sr); } } throw new ArgumentException($"{filePath}文件不存在"); } public static T Deserialize<T>(StreamReader sr) { XmlSerializer xs = new XmlSerializer(typeof(T)); return (T)xs.Deserialize(sr); } } }
XML文件:
<?xml version="1.0" encoding="utf-8" ?> <PushConfig> <IOS> <XinGe> <token>86bc327e9ab11d764339aa2f5101eb085ba974b5</token> </XinGe> <JiGuang> <token>1a0018970a9e1c3c9cc</token> <token>1a0018970a9ee500231</token> </JiGuang> <Umeng> <token>ApHw6vB3T90ys8Pu8RDzv8bWucROICfH6WAZyig2t2f3</token> </Umeng> </IOS> <Android> <XinGe> <token>ed47412a78d9b81cf110f91e66db6a7ae942fa3f8e22206977fd0d405eb48265</token> </XinGe> <JiGuang> <token>101d8559097f4a634fb</token> </JiGuang> <Umeng> <token>123</token> <token>456</token> </Umeng> </Android> </PushConfig>
XML文件对应的实体类:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; namespace PushToolCompare.Config { [Serializable] [XmlType(TypeName = "PushConfig")] public class PushConfig { [XmlElement(ElementName = "IOS")] public IOS ios { get; set; } [XmlElement(ElementName = "Android")] public Android android { get; set; } } [Serializable] [XmlType(TypeName = "IOS")] public class IOS { [XmlElement(ElementName = "XinGe")] public XinGe xinGe { get; set; } [XmlElement(ElementName = "JiGuang")] public JiGuang jiGuang { get; set; } [XmlElement(ElementName = "Umeng")] public Umeng umeng { get; set; } } [Serializable] [XmlType(TypeName = "Android")] public class Android { [XmlElement(ElementName = "XinGe")] public XinGe xinGe { get; set; } [XmlElement(ElementName = "JiGuang")] public JiGuang jiGuang { get; set; } [XmlElement(ElementName = "Umeng")] public Umeng umeng { get; set; } } [XmlType(TypeName = "XinGe")] public class XinGe { [XmlElement("token")] public List<string> token { get; set; } } [XmlType(TypeName = "JiGuang")] public class JiGuang { [XmlElement("token")] public List<string> token { get; set; } } [XmlType(TypeName = "Umeng")] public class Umeng { [XmlElement("token")] public List<string> token { get; set; } } }
生成代码:
PushConfig pushConfig = XmlHelper.Deserialize<PushConfig>(PushConfigPath);

浙公网安备 33010602011771号